Як ініціалізувати масив у Java?


434

Я ініціалізую такий масив:

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 вказує на помилку в цьому рядку:

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

Як я можу вирішити проблему?


3
Ви можете замінити цей "int data [] = new int [10]" на "int data []". Ви там витрачаєте пам’ять.
зниклий фактор

Відповіді:


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

Сказане невірно (синтаксична помилка). Це означає, що ви призначаєте масив, до data[10]якого може міститись лише елемент.

Якщо ви хочете ініціалізувати масив, спробуйте використати ініціалізатор масиву :

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};

Зауважте різницю між двома деклараціями. При призначенні нового масиву оголошеній змінній newнеобхідно використовувати.

Навіть якщо ви виправляєте синтаксис, доступ data[10]досі залишається неправильним (доступ data[0]до нього можна отримати лише data[9]тому, що індекс масивів на Java базується на 0). Доступ data[10]буде кидати ArrayIndexOutOfBoundsException .


2
Власне, першопричиною її неправильності є те, що це синтаксична помилка! AIOB відбудеться лише за умови прийняття синтаксису.
Стівен C

1
Чи можете ви мені допомогти? Якщо я оголошу масив таким чином: public static void product(int[] array){ int[] productArray = new int[array.length];і хочу встановити всі значення productArray нуля , що мені написати? (Думаю, я повинен написати цикл і встановити всі значення на нуль, чи є кращий спосіб це зробити?)
Hengameh

2
@Hengameh: Ініціалізовано до 0 за замовчуванням. Див stackoverflow.com/a/2154340/1000655
Ніл Gokli

39

Спробуйте data = new int[] {10,20,30,40,50,60,71,80,90,91 };


1
+1. У вас є додаткова дужка відкриття. Можна також записати: data [0] = 10; дані [1] = 20; .... після даних int [] = new int [10], але це занадто багато коду, і в кінцевому підсумку це робити те саме.
Гаміш Грубіян

28

Коли ви створюєте масив розміром 10, він виділив 10 слотів, але від 0 до 9. Це для циклу може допомогти вам побачити це трохи краще.

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

Ви можете зробити:

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

3
Мені цікаво, яку цінність це додає до прийнятої відповіді за 5 років до цього.
TylerH

12

Синтаксис

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

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

Приклад:

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

8

Замість того, щоб вивчати неофіційні веб-сайти, навчайтесь на веб-сайті Oracle

Посилання наступне: Клацніть тут

* Ви можете знайти ініціалізацію, а також декларацію з повним описом *

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
}

Вхід : 10 // розмір масиву 10 20 30 40 50 60 71 80 90 91

Відображення даних:

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

Вихід: 10 20 30 40 50 60 71 80 90 91


3

Ви не можете ініціалізувати такий масив. Окрім того, що запропонували інші, ви можете зробити:

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

3

Якщо ви хочете ініціалізувати масив у конструкторі, ви не можете використовувати такі ініціалізатори масивів, як.

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

Просто змініть його на

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

Не потрібно вказувати розмір за допомогою data[10] = new int[] { 10,...,91} просто оголосити властивість / поле int[] data;та ініціалізувати його, як вище. Виправлена ​​версія коду виглядатиме так:

public class Array {

    int[] data;

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

}

Як бачите, дужка порожня. Немає потреби вказувати розмір між дужками, оскільки ініціалізація та її розмір визначаються підрахунком елементів між фігурними дужками.


2

ви намагаєтесь встановити 10-й елемент масиву на спробу масиву

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

FTFY


0

Можливо, це спрацює:

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
Чим це відрізняється від питання? Прошу продовжити свою відповідь!
Олександр Фогт

2
Ініціалізатор масиву заборонений у конструкторах !!!! Ви повинні хоча б протестувати свої пропозиції, перш ніж публікувати їх ...
Sedat Kilinc
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.