Java中的数组,如何填充

时间:2013-12-04 20:27:05

标签: java

您好我想在Java中填充数组。我试图轻松地做到这一点

int[] tab = null;

for(int i=0; i<5; i++)
 {
tab[i]=i;
}

为什么这个结构不起作用? 错误:空指针异常

6 个答案:

答案 0 :(得分:4)

这就是你实现它的方式

 int[] tab = new int[5];

 for(int i=0; i<tab.length; i++)
 {
   tab[i]=i;
 }

答案 1 :(得分:1)

您需要在使用之前初始化阵列:

int[] tab = new int`[5];

如果你需要动态分配的东西,请使用像Vector或ArrayList这样的东西:

例如:

ArrayList<Integer> list = new ArrayList<Integer>();

     int elements_to_add = 5;
     for(int i=0; i<elements_to_add; i++)
     {
       list.add(new Integer(i) );
     }

答案 2 :(得分:1)

以下是我将以最简单的方式实现此数组的方法:

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

您的代码不起作用,因为您从不创建新对象来保存数组的元素,它只是为该对象的引用创建空间。在使用

引用对象之前
tab[i]

你必须创建一个这样的新对象:

tab = new int[5];

所以,如果你真的想因为某种原因在for循环中实现这个变量,那么你应该怎么做:

final int ARRAY_SIZE = 5;
int[] tab = new int[ARRAY_SIZE];

for(int i=0; i<ARRAY_SIZE; i++){
    tab[i] = i;
}

现在,如果你想增加数组中元素的数量,你只需要更改ARRAY_SIZE变量。

答案 3 :(得分:1)

动态分配意味着您应该使用其中一个Collection实例,例如List。如果您有一些约束(例如家庭作业规则),说您必须使用数组,那么您必须执行以下操作:

  • 将数组声明并实例化为任意大小:int[] intArray = new int[20];
  • 在添加元素期间,检查索引是否等于长度 - 1:if(index == length - 1),如果为true,
    • 创建一个大小与原始数组大小相当的临时数组(通常为2x)int[] temp = new int[intArray.length*2];
    • 将元素从原始数组复制到临时数组
    • 将temp变量值重新分配给原始:intArray = temp;
    • 在循环之后,创建一个正确长度的新数组,并将所有值从原始值复制到新原始值。 (这是因为尺寸肯定是错误的 - 长度将超过元素的数量)。

在伪代码中,它看起来像这样:

int[] intArray = new int[20];
int index = 0;
loop:
   if(index >= intArray.length - 1){
        int[] temp = new int[intArray.length * 2];
        copyAll: intArray->temp // use System.arrayCopy
        intArray = temp;
   }
   intArray[index] = value;
   index++;
endloop:
// resize because intArray will likely be too big
int[] temp = new int[index];
copyAll intArray -> temp;
intArray = temp;

正如您所看到的,使用Collection框架更好,更好:

List<Integer> intList = new ArrayList<Integer>();
loop:
   intList.add(value);
endloop

答案 4 :(得分:0)

尽管您声明此数组并将其传递为null,但您不会在此处创建任何对象。您只有null引用。这就是你错误的原因。你要做的是像int []myArray = new int[5];

那样初始化这个数组

答案 5 :(得分:0)

这样的事情应该有效:

int[] tab = new int[5];

for(int i=0; i<5; i++){
    tab[i] = i;
}