Jak zainicjować tablicę w Javie?


434

Inicjuję tablicę w następujący sposób:

public class Array {

    int data[] = new int[10]; 
    /** Creates a new instance of Array */
    public Array() {
        data[10] = {10,20,30,40,50,60,71,80,90,91};
    }     
}

NetBeans wskazuje na błąd w tym wierszu:

data[10] = {10,20,30,40,50,60,71,80,90,91};

Jak mogę rozwiązać problem?


3
Możesz zastąpić to „int data [] = new int [10]” przez „int data []”. Marnujesz tam pamięć.
missingfaktor

Odpowiedzi:


642
data[10] = {10,20,30,40,50,60,71,80,90,91};

Powyższe nie jest poprawne (błąd składniowy). Oznacza to, że przypisujesz tablicę, w data[10]której może znajdować się tylko element.

Jeśli chcesz zainicjować tablicę, spróbuj użyć Array Initializer :

int[] data = {10,20,30,40,50,60,71,80,90,91};

// or

int[] data;
data = new int[] {10,20,30,40,50,60,71,80,90,91};

Zwróć uwagę na różnicę między dwiema deklaracjami. Przy przypisywaniu nowej tablicy do deklarowanej zmiennej newnależy użyć.

Nawet jeśli poprawisz składnię, dostęp data[10]jest nadal niepoprawny (możesz uzyskać data[0]do nich dostęp tylko data[9]dlatego, że indeks tablic w Javie jest oparty na 0). Uzyskiwanie dostępu data[10]spowoduje zgłoszenie wyjątku ArrayIndexOutOfBoundsException .


2
Właściwie głównym powodem, dla którego jest on nieprawidłowy, jest błąd składniowy! AIOB miałoby miejsce tylko wtedy, gdyby składnia była akceptowalna.
Stephen C

1
Czy mógłbyś mi pomóc, Jeśli zadeklaruję tablicę w ten sposób: public static void product(int[] array){ int[] productArray = new int[array.length];i chcę ustawić wszystkie wartości productArray zero , co powinienem napisać? (Myślę, że powinienem napisać pętlę i ustawić wszystkie wartości na zero, czy jest na to lepszy sposób?)
Hengameh

2
@Hengameh: Domyślnie jest inicjowany na 0. Zobacz stackoverflow.com/a/2154340/1000655
Neal Gokli

39

Próbować data = new int[] {10,20,30,40,50,60,71,80,90,91 };


1
+1. Masz dodatkową klamrę otwierającą. Można także napisać: dane [0] = 10; dane [1] = 20; .... po danych int [] = new int [10], ale to za dużo kodu i skończy się na tym samym.
Hamish Grubijan,

28

Kiedy tworzysz tablicę o rozmiarze 10, przydziela ona 10 miejsc, ale od 0 do 9. Ta pętla for może pomóc ci zobaczyć to trochę lepiej.

public class Array {
    int[] data = new int[10]; 
    /** Creates a new instance of an int Array */
    public Array() {
        for(int i = 0; i < data.length; i++) {
            data[i] = i*10;
        }
    }
}

16

Możesz to zrobić:

int[] data = {10,20,30,40,50,60,71,80,90,91};

3
Zastanawiam się, jaką wartość to dodaje do zaakceptowanej odpowiedzi sprzed 5 lat.
TylerH

12

Składnia

 Datatype[] variable = new Datatype[] { value1,value2.... }

 Datatype variable[]  = new Datatype[] { value1,value2.... }

Przykład:

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

8

Zamiast uczyć się nieoficjalnych stron internetowych, ucz się na stronie oracle

następujący link: kliknij tutaj

* Można znaleźć inicjalizację, a także deklarację z pełnym opisem *

int n; // size of array here 10
int[] a = new int[n];
for (int i = 0; i < a.length; i++)
{
    a[i] = Integer.parseInt(s.nextLine()); // using Scanner class
}

Dane wejściowe : 10 // rozmiar tablicy 10 20 30 40 50 60 71 80 90 91

Wyświetlanie danych:

for (int i = 0; i < a.length; i++) 
{
    System.out.println(a[i] + " ");
}

Wyjście: 10 20 30 40 50 60 71 80 90 91


3

Nie można zainicjować takiej tablicy. Oprócz tego, co sugerują inni, możesz:

data[0] = 10;
data[1] = 20;
...
data[9] = 91;

3

Jeśli chcesz zainicjować tablicę w konstruktorze, nie możesz użyć takich inicjalizatorów tablic jak.

data= {10,20,30,40,50,60,71,80,90,91};

Po prostu zmień na

data = new int[] {10,20,30,40,50,60,71,80,90,91};

Nie musisz określać rozmiaru za pomocą data[10] = new int[] { 10,...,91} Wystarczy zadeklarować właściwość / pole int[] data;i zainicjować go jak wyżej. Poprawiona wersja kodu wygląda następująco:

public class Array {

    int[] data;

    public Array() {
        data = new int[] {10,20,30,40,50,60,71,80,90,91};
    }

}

Jak widać wspornik jest pusty. Nie ma potrzeby określania rozmiaru między nawiasami, ponieważ inicjalizacja i jej rozmiar są określone przez liczbę elementów między nawiasami klamrowymi.


2

próbujesz ustawić 10. element tablicy na próbę tablicową

data = new int[] {10,20,30,40,50,60,71,80,90,91};

FTFY


0

Może to zadziała:

public class Array {

    int data[] = new int[10]; 
    /* Creates a new instance of Array */
    public Array() {
        data= {10,20,30,40,50,60,71,80,90,91};
    }
}

6
Czym różni się to od pytania? Proszę rozszerzyć swoją odpowiedź!
Alexander Vogt,

2
Inicjator tablicy nie jest dozwolony w konstruktorach !!!! Powinieneś przynajmniej przetestować swoje propozycje, zanim je opublikujesz ...
Sedat Kilinc
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.