好的,所以我正在研究我的会计应用程序,这是我到目前为止所得到的:
public class Accounting {
public static void main(String[] args) {
while(true){
Scanner input = new Scanner(System.in);
String userinput = input.nextLine();
String[] parts = userinput.split(" ");
String part1 = parts[0];
String part2 = parts[1];
String part3 = parts[2];
int a = Integer.parseInt(part1);
float r = Float.parseFloat(part2);
int t = Integer.parseInt(part3);
double Total = a*Math.pow(1.0+(r/100.0), t);
String[] result = userinput.split(" ");
if (result.length == 3) {
System.out.println(Total);
} else {
System.out.println("Usage: a r t (a is the amount, r is the rate, and t is the time)");
}
}
}
}
我这样做,如果用户输入超过3个输入,它将给出一个使用提示。但是,当我输入2个输入时,我得到一个错误而不是使用提示,即使2不等于3.
下面是错误消息:
线程“main”中的异常java.lang.ArrayIndexOutOfBoundsException:2 在Accounting.main(Accounting.java:15)
我该如何解决这个问题?
编辑:我的问题不在于数组的部分不存在,因为只有两个输入,但它不会给出使用提示。
答案 0 :(得分:5)
原因是您尝试访问不存在的数组的一部分:
String part3 = parts[2];
parts.length == 2
我假设你得到一个超出范围的索引错误?
答案 1 :(得分:2)
当您只有2个输入时,零件数组的范围是[0..1],因此当您尝试访问零件[2]时:
String part3 = parts[2];
将引发错误。
答案 2 :(得分:0)
“我的问题不在于数组的部分不存在,因为只有两个输入,但它不会提供使用提示。”
不,你错了。关键是您需要检查数组之前>>的长度,并使用假设的长度。这是一个应该正常工作的简单重新排列(除此之外,你可能会错过一些东西,比如退出条件并尝试解析中的NumberFormatException):
Scanner input = new Scanner(System.in);
while(true){
String userinput = input.nextLine();
String[] parts = userinput.split(" ");
// check first
if (parts.length != 3){
System.out.println(
"Usage: a r t (a is the amount, r is the rate, and t is the time)"
);
continue; // skip the computation if the input is wrong
}
String part1 = parts[0]; // these lines WILL throw an error
String part2 = parts[1]; // if you attempt to access elements
String part3 = parts[2]; // of the array that do not exist
int a = Integer.parseInt(part1);
float r = Float.parseFloat(part2);
int t = Integer.parseInt(part3);
double total = a*Math.pow(1.0+(r/100.0), t);
System.out.println(total);
}