数组索引超出了java的范围

时间:2014-08-18 16:59:09

标签: java multidimensional-array

我正在尝试制作一个程序,其中用户将提示要输入多少输入。我的多数组中有3个用户输入,如果用户输入1,则只显示一个用户输入。否则,如果用户输入2或3,则将显示2或3个用户输入。在测试我的程序时,它运行了,但出现了java.lang.ArrayIndexOutOfBoundsException错误。我似乎无法在这里找到错误,我已经尝试在我的多个阵列上添加额外的索引但我仍然遇到同样的错误。

import java.io.*;


public class student {

private int stud_id;
private String stud_prog;
Object ctr1;

BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

Object stud [][] = {{1,2,3},{"enter name:","enter age:","enter gender:"}};

public void stud() throws NumberFormatException,IOException{

    System.out.print("Enter How Many Inputs: ");
    int num1 = Integer.parseInt(in.readLine());
    for (int x = 1; x<=num1;x++){
        for (int i = 0 ; i<num1;){

            System.out.println(stud[x][i]);
            ctr1 =in.readLine();
            i++;

        }

    }

 }



}

/////////////////////////////////////////////// ////////////////////主要///////////////////////////// ////////////////////////////////////////////////// //

import java.io.IOException;


public class persontest {

public static void main(String[]args) throws NumberFormatException,IOException{

    student s = new student();
    s.stud();


 }

}

3 个答案:

答案 0 :(得分:4)

数组索引从0开始,结束到length-1

变化:

for (int x = 1; x<=num1;x++){

要:

for (int x = 0; x<num1;x++){

在迭代之前首先检查数组的长度

if(num1<=stud.length){
    for (int x = 0; x<num1;x++){
         ....
    }
}

注意:多维数组可以包含列的变量no。您应该使用stud[row].length来获取任何行的列数。

  • stud.length不提供行
  • stud[i].length不提供第i行的列

根据评论

  

我的意思是,如果用户输入1,那么将出现1个用户属性,如果是2然后是2,依此类推......

这是你在寻找什么?

String stud[] = { "enter name:", "enter age:", "enter gender:" };

System.out.print("Enter How Many Inputs: ");
int num1 = Integer.parseInt(in.readLine());
if (num1 <= stud.length) {
    for (int x = 0; x < num1; x++) {
        System.out.println(stud[x]);
        //read input from user
    }
}

答案 1 :(得分:0)

Java使用零索引数组,这意味着计数从0开始(不是1!),1,2,3,4 ......

这意味着当你尝试引用数组[4]时,它实际上是获取数组中的第五个元素(如果它不存在?ArrayIndexOutOfBoundsException!)

您可以通过将其更改为这样来修复您的for循环;它从零开始,然后上升到(但不等于)num1。

for(int x = 0; x < num1; x++) {

答案 2 :(得分:0)

 for (int x = 1; x<=num1;x++){
        for (int i = 0 ; i<num1;){

            System.out.println(stud[x][i]);
            ctr1 =in.readLine();
            i++;

        }

    }

这里它将以两个for循环运行。第一个从1开始到num1。但在下一次迭代中,调用stud[x][i] x将为2。但是螺柱只有指数0,1。请检查您的逻辑