这是我的代码:
for (int i = 0; i < 99; i++)
{
String inputString = keyboard.next();
String[] inputArray = inputString.split(":");
if (inputString.equals("quit"))
System.out.println("You have quit");
FirstArray[i] = inputArray[0];
SecondArray[i] = Integer.parseInt(inputArray[1]); // these throw errors
ThirdArray[i] = Integer.parseInt(inputArray[2]);
System.out.println(FirstArray[i]);
System.out.println(SecondArray[i]);
System.out.println(ThirdArray[i]);
所以这是我的代码,我正在尝试测试数组,我需要使用分隔符来获取用户分割的输入“:”
我必须parseInt
最后两个数组(因为它们采用整数值)才能从inputArray
的第二和第三个索引获得拆分输入。
我有代码的最后一部分来测试它是否有效,而且确实如此,但当我输入“quit”来结束它抛出的循环时:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
我已经搜索并理解了这个问题,但不知道如何避免它。对不起,如果我不解释我的问题,将会感谢另一个有效的解决方案。在此先感谢您的帮助
答案 0 :(得分:1)
字符串“quit”不包含任何“:”字符,因此inputArray[1]
的结果是包含单个元素的数组。因此,只要您尝试访问if (inputString.equals("quit")) {
System.out.println("You have quit");
return; // add this line
}
,就会有异常,因为索引1引用数组中的第二个元素,尽管此数组只有一个元素
spark-submit
添加return语句(如上所示),这将通过代码有问题的代码。无论如何,这似乎是正确的做法,因为用户要求退出程序。
答案 1 :(得分:1)
仅访问inputArray
直到其长度,即首先使用inputArray.length()
查找数组长度,然后从0 to length -1
访问数组元素。
您的代码中最明显的情况是当您输入quit
但其他输入也可能导致它,因为您没有检查数组的长度,即如果任何输入的分割数组的长度小于3,您将收到这个例外。
答案 2 :(得分:0)
您遇到的问题是无论是否收到quit命令,都会运行访问inputArray变量的代码。你有两个选择。
1)返回退出命令(推荐)
if (inputString.equals("quit")) {
System.out.println("You have quit");
return; // This will avoid running the code below
}
FirstArray[i] = inputArray[0];
SecondArray[i] = Integer.parseInt(inputArray[1]); // these throw errors
ThirdArray[i] = Integer.parseInt(inputArray[2]);
System.out.println(FirstArray[i]);
System.out.println(SecondArray[i]);
System.out.println(ThirdArray[i]);
2)将剩下的代码丢弃在其他案例中
if (inputString.equals("quit")) {
System.out.println("You have quit");
} else {
FirstArray[i] = inputArray[0];
SecondArray[i] = Integer.parseInt(inputArray[1]); // these throw errors
ThirdArray[i] = Integer.parseInt(inputArray[2]);
System.out.println(FirstArray[i]);
System.out.println(SecondArray[i]);
System.out.println(ThirdArray[i]);
}
如果inputArray没有达到预期的长度,我还建议添加一个错误案例。
if (inputArray.length != 3) {
System.out.println("That's weird. I was expecting 3 parameters, but only found " + inputArray.length);
return;
}
答案 3 :(得分:0)
您可以使用Scanner类来阅读输入。
Scanner scanner = new Scanner(System.in);
for(int i=0; i<Noofiterations; i++){ //iterations are the no.of times you need to read input.
String[] inputArray = scanner.nextLine().split(":");
//rest of the code is same as yours.
}
Input should be in the form "abc:123:334:wet"
希望这会有所帮助。如果我没有得到您的问题,请告诉我。