您好我想在Java中填充数组。我试图轻松地做到这一点
int[] tab = null;
for(int i=0; i<5; i++)
{
tab[i]=i;
}
为什么这个结构不起作用? 错误:空指针异常
答案 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];
if(index == length - 1)
,如果为true,
int[] temp = new int[intArray.length*2];
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;
}