如何在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 []”。您在那浪费内存。
missingfaktor

Answers:


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

上面的信息不正确(语法错误)。这意味着您正在分配一个data[10]仅可容纳元素的数组。

如果要初始化数组,请尝试使用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};

注意两个声明之间的区别。将新数组分配给声明的变量时,new必须使用。

即使您纠正了语法,访问data[10]仍然是不正确的(您只能访问data[0]data[9]因为Java中的数组索引是基于0的)。访问data[10]将抛出ArrayIndexOutOfBoundsException


2
实际上,不正确的主要原因是语法错误!仅当语法可接受时才发生AIOB。
Stephen C

1
如果我这样声明一个数组,public static void product(int[] array){ int[] productArray = new int[array.length];并希望将所有值都设置productArray 为零,那我应该写什么呢?(我认为我应该编写一个循环并将所有值都设置为零,还有什么更好的方法吗?)
Hengameh 2015年

2
@Hengameh:默认情况下初始化为0。请参阅stackoverflow.com/a/2154340/1000655
Neal Gokli'3

39

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


1
+1。您有一个额外的开括号。一个人也可以这样写:data [0] = 10; 数据[1] = 20; .... int data [] = new int [10]之后,但是代码太多了,最终会做同样的事情。
Hamish Grubijan 09年

28

当创建大小为10的数组时,它分配了10个插槽,但从0到9。此for循环可能会帮助您看到更好的效果。

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个元素设置为try

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

FTFY


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.