for 循环中的 ArrayIndexOutOfBoundsException
ArrayIndexOutOfBoundsException inside for loop
这里我取一个超过九位数字的数字,将该数字分成九位数字组并将其存储在一个数组中。
当我 运行 此代码将值存储在 arrayOfNumbers 中时,抛出 ArrayIndexOutOfBoundsException。
public BigNum(String s) {
if (badNum(s)) {
throw new IllegalArgumentException(); //Exception to check for invalid input
}
int arraySize = 1;
num = s;
int [] arrayOfNumbers = new int[arraySize];
int numSize = s.length();
if (numSize <= 9)
{
arraySize = 1;
arrayOfNumbers[0] = Integer.parseInt(s); //THIS CLAUSE IS WORKING
}
else if((numSize % 9) >= 1) {
arraySize = ((numSize % 9) + 1);
int x = 0;
int y = 9;
int[] evenString = new int[arraySize];
for (int i=0; i < arraySize; i++){
String w = s.substring(x,y);
arrayOfNumbers[i] = Integer.parseInt(w); //THIS LINE IS FAILING *********
if(i == arraySize - 2){
x = x + 9;
y = y + (numSize % 9);
}
else{
y = y + 9;
x = x + 9;
}
}
System.out.println(arraySize);
}
else if((numSize % 9 == 0)) {
arraySize = (numSize/9);
int x = 0;
int y = 9;
for (int i=0; i < arraySize; i++){
String w = s.substring(x,y);
int[] evenString = new int[arraySize]; //THIS CLAUSE IS WORKING
y = y*2;
x = x+9;
}
}
}
问题是您正在分配给初始化为只有一个元素的 arrayOfNumbers。您的意思是改为分配给 evenString 吗? evenString 使用此循环的正确数组大小进行初始化。
您也可以只将 arrayOfNumbers 声明为与 evenString 数组大小相同。例如:
int[] arrayOfNumbers = new int[arraySize];
for (int i=0; i < arraySize; i++){
String w = s.substring(x,y);
arrayOfNumbers[i] = Integer.parseInt(w); //THIS LINE IS FAILING *********
if(i == arraySize - 2){
x = x + 9;
y = y + (numSize % 9);
}
else{
y = y + 9;
x = x + 9;
}
}
这里我取一个超过九位数字的数字,将该数字分成九位数字组并将其存储在一个数组中。 当我 运行 此代码将值存储在 arrayOfNumbers 中时,抛出 ArrayIndexOutOfBoundsException。
public BigNum(String s) {
if (badNum(s)) {
throw new IllegalArgumentException(); //Exception to check for invalid input
}
int arraySize = 1;
num = s;
int [] arrayOfNumbers = new int[arraySize];
int numSize = s.length();
if (numSize <= 9)
{
arraySize = 1;
arrayOfNumbers[0] = Integer.parseInt(s); //THIS CLAUSE IS WORKING
}
else if((numSize % 9) >= 1) {
arraySize = ((numSize % 9) + 1);
int x = 0;
int y = 9;
int[] evenString = new int[arraySize];
for (int i=0; i < arraySize; i++){
String w = s.substring(x,y);
arrayOfNumbers[i] = Integer.parseInt(w); //THIS LINE IS FAILING *********
if(i == arraySize - 2){
x = x + 9;
y = y + (numSize % 9);
}
else{
y = y + 9;
x = x + 9;
}
}
System.out.println(arraySize);
}
else if((numSize % 9 == 0)) {
arraySize = (numSize/9);
int x = 0;
int y = 9;
for (int i=0; i < arraySize; i++){
String w = s.substring(x,y);
int[] evenString = new int[arraySize]; //THIS CLAUSE IS WORKING
y = y*2;
x = x+9;
}
}
}
问题是您正在分配给初始化为只有一个元素的 arrayOfNumbers。您的意思是改为分配给 evenString 吗? evenString 使用此循环的正确数组大小进行初始化。
您也可以只将 arrayOfNumbers 声明为与 evenString 数组大小相同。例如:
int[] arrayOfNumbers = new int[arraySize];
for (int i=0; i < arraySize; i++){
String w = s.substring(x,y);
arrayOfNumbers[i] = Integer.parseInt(w); //THIS LINE IS FAILING *********
if(i == arraySize - 2){
x = x + 9;
y = y + (numSize % 9);
}
else{
y = y + 9;
x = x + 9;
}
}