Avatar billede muingaza Nybegynder
23. januar 2005 - 01:19 Der er 5 kommentarer og
1 løsning

Kan ikke returnere et opdateret array!

I min metode "element" bliver der lavet en liste bestående af de tal som er i mit dobbelt array. Men jeg kan ikke få fat i denne liste i min listHere metode! Er der nogen som har et hint til hvad der går galt? Min listHere metode returnere tilsyneladende kun min private field som jeg har skrevet i starten af klassen.



public class Test {
  private int[][] map;
  private int[] list;

 
  public Test() {
    map = new int [4][4];
    map[3][3] = 1001;
    map[0][0] = 1002;
  }


  public void element() {
    int z = 0;
    int k = 0;
     
      for(int i = 0; i <= 3; i++)
      {
          for (int j = 0; j<=3; j++)
          {
              k = map[i][j];
              list[z] = k;
              z++;
             
             

             
          }
      }
  }
 
  public int[] listHere() {
    return list;
  }
Avatar billede jakoba Nybegynder
23. januar 2005 - 01:27 #1
det burde virke fint. Så fejlen må være i den kode hvor du kalder de 2 metoder.

må vi se den kode der bruger din klasse Test.
Avatar billede jakoba Nybegynder
23. januar 2005 - 01:32 #2
Hov nej. det er i constructoren det går galt.

  public Test() {
    map = new int [4][4];  // opretter et array lokalt i constructor metoden
    map[3][3] = 1001;      // lægger en værdi i det lokale array
    map[0][0] = 1002;      // og en til
  }                        // når metoden forlades bliver det lokale array smidt væk

'map' indeni den construkto er aldrig det array du definerer udenfor funktionen. lav om til:
  public Test() {
    //FJERNET LINIE  map = new int [4][4];
    map[3][3] = 1001;      // lægger en værdi i det klassens array 'map'
    map[0][0] = 1002;      // og en til
  }
Avatar billede jakoba Nybegynder
23. januar 2005 - 01:37 #3
men kik også lidt nærmere på det du får returneret fra metoden listHere. det borde være 16 celler langt og have et 0 i hver celle

indsæt fx linien:
    Sustem.out.println( XXX.listHere().toString() ); // udskriv alle celler i det array

XXX udskiften med navnet på klasse instansen (den du også bruger der du kalder listHere()
Avatar billede jakoba Nybegynder
23. januar 2005 - 01:39 #4
Og Ups midterste kommentar var forkert. den linie opretter IKKE en ny lokal variabel, så det er helt fint at beholde constructoren som du har den.
Avatar billede muingaza Nybegynder
23. januar 2005 - 01:43 #5
Havde lige glemt at skrive list = new int[16]; i konstruktoren, så nu fungere det. Et andet spørgsmål. Hvis jeg i en anden klasse gerne vil have de første element i den liste som jeg kan hente fra listHere(), hvordan gør man så det? Jeg er med på at man skal lave en Test instans p fx:

Test p = new Test();
p.listHere();

Men hvordan får jeg et enkelt tal udad denne liste?
Avatar billede kalp Novice
23. januar 2005 - 20:34 #6
Du skal oprette en int[] array i den klasse som kalder metoden listHere();

Fx..

int[] nyliste;

nyliste = p.listHere();

nu har du din liste gemt i nyliste.

Du kan nu hive et tal ud.. fx. hvis du vil have index 0 ud

int tmp;

tmp = nyliste[0];

så gemmes det der står i index 0 i vores variabel tmp.
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