Avatar billede minau Nybegynder
08. januar 2004 - 12:27 Der er 15 kommentarer og
2 løsninger

Offentlig instans fra en metode

Hej

JEg har en metode (ompret_hest) der skal oprette en instans af Hest.

Problemet er at når jeg opretter den i en metoden (modsat i main) - så kan jeg ikke se min Hest-instans (kald den bare Isolde) fra andre metoder end min ompret_hest - hvorfor?

min ompret_hest er angivet til public static
Avatar billede arne_v Ekspert
08. januar 2004 - 12:34 #1
Må vi se lidt kode ?
Avatar billede mikkelbm Nybegynder
08. januar 2004 - 12:34 #2
Returnerer du den nye instans af Hest?

altså:

public Hest opretHest()
{
  return new Hest();
}

så kan du bare kalde den med:

Hest minHest = opretHest();
Avatar billede minau Nybegynder
08. januar 2004 - 12:44 #3
public class Hest
{
   
    public String Navn;
    public int Farve, Antal_Vundne_Loeb, Pris, Total_Point, Aar;
    public boolean Jokey, Halt, Forkoelet, Syg;
    public int[] Antal_Ryk;
   
    public Hest(String Navn, int Farve, int Pris, int Total_Point, int Aar, int[] Antal_Ryk)
    {
       
        this.Navn = Navn;
        this.Farve = Farve;
        this.Pris = Pris;
        this.Aar = Aar;
       
        this.Antal_Ryk = Antal_Ryk;
       
    }
   
    public String toString()
    {
       
        String sl="";
       
        for (int i=0; i<Antal_Ryk.length; i++)
            sl += "\n" + Antal_Ryk[i];       
       
        String Farve_Txt = "";
        switch (Farve)
        {
            case 1:
                Farve_Txt = "Hvid";
                break;
               
            case 2:
                Farve_Txt = "Sort";
                break;
               
            case 3:
                Farve_Txt = "Gul";
                break;
               
            case 4:
                Farve_Txt = "Blaa";
                break;
               
            case 5:
                Farve_Txt = "Roed";
                break;
               
            default:
                Farve_Txt = "Ingen Tildelt Farve... Dette kan give et problem!";
                break;
               
        }
       
        return (Navn + "\n" + Farve_Txt + "\n" + Pris + "\n" + Total_Point + "\n" + Aar + sl);
       
    }
   
}
Avatar billede minau Nybegynder
08. januar 2004 - 12:45 #4
public class Derby
{
    public int SpillerTur;
    public int LobNr;
    public int TotoVærdi;
       
    public static void main(String[] args)
    {
       
        /* Vi starter med at initialisere kort, spillere, bane osv. */
       
        Initialize(0);
       
        System.out.println(Isolde);
       
        Placering(Isolde,1);
    }
   
    static void LobsProgram()
    {
       
    }
   
    static void Handle(int Spiller)
    {
        // Her skal der hentes alle de ting som spilleren har.
        // Her skal disse skrives ud.
       
        System.out.println("-- Foretag et valg: --");
        System.out.println("L) Vis Loebsprogram.");
        System.out.println("1) Saelg en hest. (" /* antal af heste */);
        System.out.println("2) Saelg en af foelgende ting: Firma, Jokey, Aktie eller Obligation.");
        System.out.println("3) Koeb en hest. (" /* antal af heste */);
        System.out.println("4) Koeb en af foelgende ting: Firma, Jokey, Aktie eller Obligation.");
        System.out.println("5) Forlad menu.");
       
    }
   
    public static void Initialize(int Code)
    {
        int[] RundeRyk = {4,1,2,3,3,4,2,3,1,4,2,3};
       
        Hest Isolde = new Hest("Isolde", 5, 2000, 32, 2, RundeRyk);
       
    }
   
    public static void Placering(Hest Heste, int runde)
    {
        System.out.println("Hesten rykker: " + Heste.Antal_Ryk[runde-1]);
    }
   
    /*
    static void Laan(int Spiller)
    {
       
    }
    */
}
Avatar billede mikkelbm Nybegynder
08. januar 2004 - 12:49 #5
public static void main(String[] args)
{
       
        /* Vi starter med at initialisere kort, spillere, bane osv. */
       
        Hest Isolde = Initialize(0);
       
        System.out.println(Isolde);
       
        Placering(Isolde,1);
}


public static Hest Initialize(int Code)
{
    int[] RundeRyk = {4,1,2,3,3,4,2,3,1,4,2,3};
       
    Hest Isolde = new Hest("Isolde", 5, 2000, 32, 2, RundeRyk);
    return Isolde;
}

Håber det kan gi' dig en idé???
Avatar billede minau Nybegynder
08. januar 2004 - 13:51 #6
Problemet kommer når vi skal have oprettet 20 heste og vi kan jo ikke returnere 20 forskellige værdier, uden at skulle kalde metoden igen.

DVS:

public static void main(String[] args)
    {
       
        /* Vi starter med at initialisere kort, spillere, bane osv. */
       
        Initialize(0);
       
        System.out.println(Isolde);
        System.out.println(Isolde1);
        System.out.println(Isolde2);       
        //osv...

        Placering(Isolde,1);
    }
     
    public static void Initialize(int Code)
    {
        int[] RundeRyk = {4,1,2,3,3,4,2,3,1,4,2,3};
       
        Hest Isolde = new Hest("Isolde", 5, 2000, 32, 2, RundeRyk);

        int[] RundeRyk = {1,1,1,3,3,4,2,3,1,4,3,3};

        Hest Isolde1 = new Hest("Isolde1", 5, 2000, 32, 2, RundeRyk);

        int[] RundeRyk = {5,1,2,3,3,4,2,2,1,4,2,3};

        Hest Isolde2 = new Hest("Isolde2", 5, 2000, 32, 2, RundeRyk);
    }
Avatar billede arne_v Ekspert
08. januar 2004 - 13:56 #7
Du kan returnere et array af Hest !
Avatar billede mikkelbm Nybegynder
08. januar 2004 - 13:57 #8
I kan ikke komme uden om at kalde metoden mere end én gang, medmindre i lægger dem i et array.
Avatar billede arne_v Ekspert
08. januar 2004 - 13:57 #9
public static Hest[] init() {
  Hest[] heste = new Hest[20];
  heste[0] = new Hest(...);
  ...
  heste[19] = new Hest(...);
  return heste;
}
Avatar billede mikkelbm Nybegynder
08. januar 2004 - 13:58 #10
Nå, der var Arne hurtigere :)
Avatar billede minau Nybegynder
08. januar 2004 - 14:10 #11
Er kommet frem til at lave en global array HESTE[] variabel - Som vi så fylder i initialize - altså det med array (indirekte) var en god idee :-) (= smid bare svar for det (synes godt at i begge kan få :-)
Avatar billede minau Nybegynder
08. januar 2004 - 14:12 #12
Når nu jeg har jer - i linjekoderne

int[] RundeRyk = {4,1,2,3,3,4,2,3,1,4,2,3};
Hest Isolde = new Hest("Isolde", 5, 2000, 32, 2, RundeRyk);

ville vi helst have arrayet og det hele ind af én gang - men

Hest Isolde = new Hest("Isolde", 5, 2000, 32, 2, {4,1,2,3,3,4,2,3,1,4,2,3});

virker ikke. nogen foreslag?
Avatar billede mikkelbm Nybegynder
08. januar 2004 - 14:19 #13
Jeg tror faktisk ikke det kan lade sig gøre på den måde, men må indrømme at jeg ikke er helt sikker...

Mon ikke Arne ved det? :)
Avatar billede arne_v Ekspert
08. januar 2004 - 14:22 #14
Hest Isolde = new Hest("Isolde", 5, 2000, 32, 2, new int[] {4,1,2,3,3,4,2,3,1,4,2,3});
Avatar billede arne_v Ekspert
08. januar 2004 - 14:22 #15
svar
Avatar billede minau Nybegynder
08. januar 2004 - 14:23 #16
opretter lige spørgsmål

http://www.eksperten.dk/spm/448785
Avatar billede minau Nybegynder
08. januar 2004 - 14:24 #17
Tanx arne - du kan jo lige smide svar på det nye spørgsmål
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester