jak poradzić sobie z błędem: might not have been initialized

0

Mam problem z nastepującym kodem:

String[][] wyspa1;
for (int i = 0; i < zwierzaki.length; i++)
      { 

 Zasoby z = zwierzaki[i];
 int[] polozenie=z.pobierzPolozenie();
 int k=polozenie[0];
 int m=polozenie[1];
 
wyspa1[k][m] = z.pobierzSygnature();

}

}

Chce wpisać do tablicy wyspa1 sygnatury zwierzątek. Jednak wyskakuje mi taki błąd:

C:\Documents and Settings\Administrator\Wyspa\src\Wyspa.java:79: variable wyspa1 might not have been initialized
wyspa1[k][m] = z.pobierzSygnature();

Czyli kompilator zwraca błąd i nie chce się kompilować bo wyspa1 moze nie zostać zainicjalizowana. Dlaczego tak jest?

0
String[][] wyspa1 =null;

Powinno wystarczyć. W ten sposób prawidłowo inicjujesz zmienną i nie tworzysz żadnego obiektu. Zmienne lokalne, które nie zostały zainicjowane mają stan "nieokreślony", czyli mogą mieć dowolną wartość (w tym null), dlatego należy je inicjować na null.

Swoją drogą kod nie ruszy, poleci NullPointerException, bo zmienna wyspa1 nie jest nigdzie inicjowana / jest inicjowana nullem. Musisz w którym miejscu podać jawnie, że tablica ma wymiary nxm. Czyli pewno wymiary wyspy.

0
Koziołek napisał(a)
String[][] wyspa1 =null;

Powinno wystarczyć. W ten sposób prawidłowo inicjujesz zmienną i nie tworzysz żadnego obiektu. Zmienne lokalne, które nie zostały zainicjowane mają stan "nieokreślony", czyli mogą mieć dowolną wartość (w tym null), dlatego należy je inicjować na null.

Swoją drogą kod nie ruszy, poleci NullPointerException, bo zmienna wyspa1 nie jest nigdzie inicjowana / jest inicjowana nullem. Musisz w którym miejscu podać jawnie, że tablica ma wymiary nxm. Czyli pewno wymiary wyspy.

Dzieki Koziołek. Juz wiem o co chodzi :)

Mam teraz problem z wyświetleniem dwuwymiarowej tablicy typu String:

for (int i = 0; i < wyspa1.length; i++)
{
    //wydtukuj jeden rzad
          for (int j = 0; j < wyspa1[i].length; i++)
          {
System.out.print(" ");
System.out.print(wyspa1[i][j]);
          }
    System.out.println();
} 

Zwraca wynik:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 30
        at Wyspa.main(Wyspa.java:94)
 null null null null null null null null null null null null null null null null null null

Czyli wyświetla tylko pierwszą linie. Dlaczego?

0

W wewnętrznej pętli pomieszałeś zmienne. Przy inkermentacji odwołujesz się do i zamiast do j. Taki czeski błąd :-)
To będzie dziłać:

for (int i = 0; i < wyspa1.length; i++)
{
    //wydtukuj jeden rzad
          for (int j = 0; j < wyspa1[i].length; j++)
          {
               System.out.print(" ");
               System.out.print(wyspa1[i][j]);
          }
          System.out.println();
} 

0
qba7878 napisał(a)

W wewnętrznej pętli pomieszałeś zmienne. Przy inkermentacji odwołujesz się do i zamiast do j. Taki czeski błąd :-)

Dzięki wielkie :) Swoją droga to ile to sie człowiek nadenerwuje niepotrzebnie przy takim błędzie...

1 użytkowników online, w tym zalogowanych: 0, gości: 1