我有兩個向量,vectorName 和 vectorNum,我需要對它們進行迭代,最多要求輸入十次或直到沒有輸入任何內容,問題是當我到達第 10 個回圈時,它第 11 次要求輸入 vectorName,然后拋出 IndexOutOfBoundsException
這是我的代碼:
public static void main(String[] args) {
Scanner read = new Scanner(System.in);
int nameQuantity = 0;
int numQuantity = 0;
String vectorName[] = new String[10];
int vectorNum[] = new int[10];
System.out.println("enter name or enter nothing to end");
vectorName[nameQuantity] = read.nextLine();
if (vectorName[nameQuantity].length()==0) {
System.out.println("end");
}else {
nameQuantity ;
while(nameQuantity<11) {
System.out.println("enter a number from 1 to 12");
int num = read.nextInt();
if (num<=12 && num>=1) {
vectorNum[numQuantity] = num;
numQuantity ;
System.out.println("enter name or enter nothing to end");
read.nextLine();
vectorName[nameQuantity] = read.nextLine();
if(vectorName[nameQuantity].length() == 0 || numQuantity == 10) {
for (int n = 0; n<=numQuantity-1; n ) {
System.out.print("\n " vectorName[n] " " vectorNum[n]);
}
nameQuantity = 11;
}else {
nameQuantity ;
}
}else {
System.out.println("number must be from 1 to 12");
}
}
}
}
}
我嘗試將矢量大小更改為 11,但結果它保存了我不需要的第 11 個名稱,因為我希望它最多只詢問名稱和數字的十倍。我也嘗試將 do while 更改為一段時間,同樣的事情發生了。
uj5u.com熱心網友回復:
第一次迭代開始:nameQuantity = 1 numQuantity = 0
第二次迭代開始:nameQuantity = 2 numQuantity = 1
...
第 10 次迭代開始:nameQuantity = 10 numQuantity = 9
此時呼叫vectorName[nameQuantity]將導致IndexOutOfBoundsException,因為vectorName大小為10,意味著最后一個索引為9。
我不知道你為什么要求用戶輸入一個名字,然后開始一個回圈,你要求一個數字,然后要求一個名字。
你的邏輯:
Receive name from user
If name is empty
Stop
Else
Loop 10 times:
Receive number from user
If name is empty or received 10 numbers
Stop
為什么不把所有東西都放在一個回圈中,首先你要一個名字,如果提供了一個名字,就要求一個數字?
Loop 10 times
Receive name from user
If name is empty
Stop
Else
Receive number from user
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/525739.html
上一篇:如何設定子類具有不同屬性的Typescript繼承類?
下一篇:訪問表-運算式生成器意外結果
