字符串数组始终抛出ArrayIndexOutOfBoundsException

时间:2017-02-14 15:05:23

标签: java arrays string indexoutofboundsexception

我试图通过用户输入用字符串数组填充值。我稍后会在这个课上做更多的事情,但只是想看看数组已填满并将其打印出来。我使用while循环来填充特定值,等待用户输入0来停止,但是在我提交一个值后,无论数组大小还是循环,我都会得到一个ArrayIndexOutOfBoundsException。输入0也不会阻止它。完整代码如下。

此外,异常具有与之关联的数组的大小(在本例中为25。)

非常感谢帮助 - 谢谢!

import java.util.Scanner;

public class Dincision {
static Scanner scanner = new Scanner(System.in);

public static String entered;
public static String[]foods;

public static void main (String[]args){
    getChoices();
    int count=0;
    for (count=0; count<=24; count++){
        System.out.println(foods[count]);
    }
}

static public void getChoices() {
    int i=0;
    foods= new String[25];
    String input;
    System.out.println("Enter an eating option.");
    input=scanner.next();
    while (input != "0"){
        foods[i]=input; //error here//
        i++;
    }
    System.out.println("That's all!");

}
}

3 个答案:

答案 0 :(得分:7)

这里有两个问题。首先,那是not the correct way to compare Strings。您应该使用while(!input.equals("0")代替。

其次,您无法在循环中获取新数据。它将不断重复使用相同的输入值,直到它超出数组的范围。将循环更改为:

input=scanner.next();
while(!input.equals("0")){
    foods[i]=input;
    i++;
    input=scanner.next();
}

在循环中获取新输入。

另外,为了安全起见,您应该在while循环中添加边界检查。如果没有更多的空间可以放入它,请停止循环。

while(!input.equals("0") && i < foods.length){

答案 1 :(得分:0)

您应该将while语句中的循环限制为数组的大小。你试图获得不存在的食物[26]。

答案 2 :(得分:0)

由于我无法发表评论:我更喜欢

!"0".equals(input)

因为它在输入为空时有效。