2014-04-22 153 views
0

我不是一个get程序员,我一直有我的代码问题。 我得到的错误:数组混淆

`java.lang.ArrayIndexOutOfBoundsException: 0` 

一些帮助将不胜感激。谢谢。

我的代码:

import java.util.Scanner; 
public class Gradebook1D { 

    public static void main(String[] args) { 
    Scanner input = new Scanner(System.in); 
    int[] id = new int[0]; 
    double[] quiz1 = new double[0]; 
    double[] quiz2 = new double[0]; 
    double[] quiz3 = new double[0]; 

    int idStudent = 0; 
    System.out.print("Enter how student's are in your class: "); 
    idStudent = input.nextInt(); 

    double[] sum = new double[0]; 
    for (int i = 0; i < idStudent; i++){ 
     System.out.println("Enter student ID: "); 
     id[i] = input.nextInt(); 

     System.out.print("\n Enter score for Quiz1: "); 
     quiz1[i] = input.nextInt(); 

     System.out.print("\n Enter score for Quiz2: "); 
     quiz2[i] = input.nextInt(); 

     System.out.print("\n Enter score for Quiz3: "); 
     quiz3[i] = input.nextInt(); 

     sum[i] = quiz1[i] + quiz2[i] + quiz3[i]; 
    } 
    } 
} 
+1

'new int [0]','new double [0]'表示零大小! – Baby

+0

谢谢大家的帮助。我不知道我必须先获取输入然后初始化数组。 – SkyToken

回答

1

当你做new int[0],新的double [0]等等时,你开始的是一个零大小的数组......尝试在知道需要多长时间后设置阵列大小:

Scanner input = new Scanner(System.in); 
System.out.print("Enter how student's are in your class: "); 
int idStudent = input.nextInt(); 

int[] id = new int[idStudent]; 
double[] quiz1 = new double[idStudent]; 
double[] quiz2 = new double[idStudent]; 
double[] quiz3 = new double[idStudent]; 
double[] sum = new double[idStudent]; 

for (int i = 0; i < idStudent; i++){ 
    //Now all arrays have size idStudent so 'i' will be in bounds 
} 
+0

谢谢。我不知道你必须先获得输入然后初始化数组。 – SkyToken

+0

还有另一种选择,即使用List对象而不是Array。如果您不知道运行时的大小或随着时间的推移大小增加,则使用列表;但是,这是一个更高级的话题。 – bcorso

1

不是最好的Java程序员,但我几乎可以肯定你是数组的大小与设置为0 [0]。

int [ ] nums = new int [ 8 ]; 
for(int ctr = 0; ctr < 8; ctr++) 
{ 
    //logic here  
} 

将是一个如何做一个正确的数组的例子。

1

初始化一个数组时,必须指定的长度为。当你做

int[] id = new int[0]; 

你指定该数组将有长度0。所以,你甚至不能访问它的第一个元素(通过使用id[0]

可以初始化它,例如,以下列方式

int[] id = new int[4]; // length 4 

但因为你得到一个代表数量的输入学生,我想这将是数组的长度:

int[] id = new int[idStudent]; 

,但是,你必须做你收到输入这个

1

您正在分配一个大小为0的数组。因此,阵列中没有“插槽”,因此当您尝试引用一个插槽时,它会超出边界。如果您想要一个“灵活”大小的数组,您可以在其中轻松添加元素,请改用ArrayList

2

初始化idquiz1quiz2quiz3idStudent这样

int[] id = new int[idStudent]; 
double[] quiz1 = new double[idStudent]; 
double[] quiz2 = new double[idStudent]; 
double[] quiz3 = new double[idStudent]; 

该错误的原因是你声明数组大小为零。你不能插入元素的数组大小为零

0

使用本

int[] id = new int[size thats you require]; 

,而不是

int[] id = new int[0]; 

希望你能得到你的解决方案

0

Java数组大小是固定的初始化。您创建了大小为0的数组。您需要首先创建数组作为最大大小,以保留您期望的结果,因为Java数组在创建后不会动态增加。