当我只输入2个输入时,为什么我的else语句不起作用?

时间:2013-12-30 22:36:57

标签: java string accounting

好的,所以我正在研究我的会计应用程序,这是我到目前为止所得到的:

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)

我该如何解决这个问题?

编辑:我的问题不在于数组的部分不存在,因为只有两个输入,但它不会给出使用提示。

3 个答案:

答案 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);
}