2013-09-24 188 views
-2

好吧,这是为了在大学的实验室。试着把用户输入的整数,放进一个数组并打印出来。数组越界异常?

当我尝试编译时,出现错误。

异常在线程 “主要” java.lang.ArrayIndexOutOfBoundsException:0 在Lab3.main(Lab3.java:12)

public class Lab3 { 


public static void main(String[] args) { 


int[] First = {}; 

for(int i=0;i<First.length;i++) 
{ 
    First[i] = (int)(Math.random() *10 +1); 
    System.out.print(First[i] + " "); 
} 
for(int i=0;i<First.length;i++) 
{ 






    if (First[i]%2==0) 
    { 

     System.out.println("Even numbers are:"+First[i]); 
    } 


} 

for(int i=0;i<First.length;i+=2)  
{ 

    if (First[i]%2==0) 
    { 

     System.out.println("Even numbers are:"+First[i]); 
    } 



} 

for(int i=0;i<First.length;i++) 
{ 
     int temp = First[i]; 
     First[i] = First[First.length - i - 1]; 
     First[First.length - i - 1] = temp; 
     System.out.println("Reverse is:"+temp); 
} 


System.out.println("First is:"+First[0]); 
System.out.println("First is:"+First[9]); 




} 

}

+2

您初始化一个空数组(0个字段),然后尝试访问其第一个字段(索引0)。 – sheltem

+0

你也可以使用arrayList它更灵活 – Marc

回答

4

通过这样做

int[] First = {}; 
// is the same as 
int[] First = new int[0]; 

你正在创建一个包含0个元素的数组。然后尝试访问第一个元素。

System.out.println("First is:"+First[0]); // access first element of empty array? 

由于您没有元素,您如何访问它们?如果你想有一个静态集合(不调整大小)有10个元素

int[] First = new int[10]; 

创建一个数组或使用List实施有一个动态集合(可调整大小)。


Java命名约定规定变量应该以小写字母字符开头。使用camelCase

+1

'ArrayIndexOutOfBoundsException'不会发生在该行,因为它受到循环保护。在'println'语句中几乎在代码的末尾抛出异常。 –

+0

@AlonsoDominguez对,让我改正这一点。谢谢。 –

+0

感谢您的帮助! – Conor

2
int[] First = {}; 

初始化0长度数组。

First[0]不存在。将该长度作为声明的一部分或稍后提及。

First = new int[10]; //creates an array of 10 ints

注意,上面会扔在First[11]

如果您不能确定大小,你可以使用一个ArrayList,而不是相同的异常。

List<Integer> first = new ArrayList<Integer>(); 
first.add((int)Math.random() *10 +1); 
+0

感谢您的帮助! – Conor

2

您应该使用List来代替,因为您的数组会随时间增长。这就是为什么你不能访问First [i],因为你的数组是用一个空数组初始化的(并且会永远保持这种状态)。你也可以用一些元素(不是你的用例)初始化你的数组,或者使用新的初始容量来初始化你的数组。

+0

谢谢!下次会知道。 – Conor

0

您应该使用List来代替,因为您的数组将会及时增长。