Inicjazlizacja tablicy dynamicznej wewnątrz funkcji.

0

Przy probie kompilacji wyskakuje mi bład:

Hello.java variable list might not have been initialized
funkcja(list);
^
1 error

   public class Hello {
     public static void main(String args[]) {
       String[] list;
       funkcja(list);
     }
         private static void funkcja  (String[] list) {
           list= new String[10];
         }
   }
 

W jaki sposób mam zainicjalizować tą tablicę wewnątrz funkcji ? [???]

0

String[] list = new String[rozmiar];

0

Pamietaj ze parametry funkcji musza istniec. Chocby tylko jako NULL. A to co Ty zrobiłeś to jest przekazanie wartości poprzez parametr do funkcji, a następnie zniszczenie tego parametry poprzez ponowna inicjalizacje. Jaki to ma sens?

0

Oki, troche nie sprecyzowalem problemu. W funkcji 'main' nie znam jeszcze rozmiaru tablicy, ale musze ja tam zadeklarowac, zeby moc uzywac jej dalej w funkcji 'main'. Rozmiar tablicy poznam dopiero w funkcji 'funkcja' .

0

Program ponizej mi dziala, ale nie wiem czy drugi raz wywloani 'list= new String[rozmiar]' zmienia dlugosc tablicy, czy moze tworzy drugi obiekt, a tego starego nie usuwa...
Wiec moze moje pytanie postawie inaczej. Jak zmienic dlugosc tablicy dynamicznej ?

  public class Hello {
     public static void main(String args[]) {
       String[] list= new String[0];                 ///////////
       funkcja(list);
     }
         private static void funkcja  (String[] list) {
           list= new String[10];                        /////////////
         }
   }
0

Niestey ponizszy program nie dziala. Blad jest w przypisaniu : ' list[1]="asd" '.
Ja jestem początkującym programistą w Javie, więc może ten problem dla wielu z was
jest banalny i ktoś spróbuje mi pomóc ? : w głownej funkcji 'main', chce zadeklarowac tablice dynamiczna. Jej dlugosc poznam dopiero w innej funkcji, wiec chcialbym tą tablice przekazac jako parametr do innej funkji i wewnatrz niej okreslic dlugosc tablicy.

    public class Hello {
     public static void main(String args[]) {
       String[] list= new String[1];
       funkcja(list);
       list[0]="asd";
       list[1]="asd";
     }
         private static void funkcja  (String[] list) {
           list= new String[10];
         }
   }
0

Napisze to tak:

public class Hello {
public static void main(String args[]) {
String[] list= new String[1]; // tworzysz instancje obiektu String[] (tablica jednoelementowa) (1)
funkcja(list); // przekazujesz obiekt jako parametr do funkcji(2)
list[0]="asd";// tu masz stary obiekt niezinicjalizowany(5)
list[1]="asd";//tu program powinien sie wysypac, bo talica jest jedno elmentowa, a ty masz zapis do drugiego elementu(6)
}
private static void funkcja (String[] list) {
list= new String[10]; // tworzysz nowa instancje obiektu(3)
} //w tym miejscu obiekt list loduje w koszu i czeka na usuniecie z pamieci(4)
}

Rozwiazanie:
Zdefinuj obiekt typu vector albo lista, a nie tablica i nie bedziesz mial problemu z rozmiarem.

0

Oki, już sobie poradziłem:

public class Hello {
public static void main(String args[]) {
Hello obiekt = new Hello();
obiekt.funkcja();
obiekt.list[0]="asd";
obiekt.list[1]="asd";
System.out.println(obiekt.list[1]);
}
private void funkcja () {
this.list=new String[10];
}
private String[] list;
}
:)

0

Jeżeli chcesz zmieniac wielkosc tablicy w czasie działąnie programu to poczytaj o ArrayList. TO jest cos podobnego do tablicy z ta różnicą ze mozna zmienaic wielkosci w czasie działąnia programu. Kilka rzeczy sie różni(np. odwołanie sie do konkretnego indexu) ale wg. mnie bedzie to dla ciebie dobre rozwiązanie.

//pisze o 7.11 ,jeszcze śpie wiec prosze o wyrozumiałość jezeli popełniłem błąd :P

0

samos dobrze radzi... ArrayList swietnie nadaje sie w tym przypadku. Jesli swoja funkcje bedziesz wywolywal z jakiegos watku i bedzie ci zalezec na synchronizacji to poczytaj tez o vector'ach... jesli jednak nie potrzeba ci synchronizacji to jak najbardziej ArrayList...

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