簡體   English   中英

Java中數組索引超出范圍

[英]array index out of bounds in java

我正在嘗試制作一個程序,其中將提示用戶輸入多少輸入。 我的多數組中有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();


 }

}

數組索引從0開始,到長度為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++){
         ....
    }
}

注意:多維數組可以包含列的變量號。 您應該使用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
    }
}

Java使用零索引數組,這意味着計數從0(不是1!),1、2、3、4開始。

這意味着當您嘗試引用array [4]時,它實際上是在數組中獲取第五個元素(如果不存在,則為ArrayIndexOutOfBoundsException!)

您可以通過將for循環更改為如下所示來修復它: 它從零開始,直到(但不等於)num1。

for(int x = 0; x < num1; x++) {
 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。 請檢查您的邏輯

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM