此计算器继续执行添加

时间:2016-03-11 13:40:53

标签: java calculator

public class Calculator {

public static void main(String[] args){
    int answer;
    Scanner scan = new Scanner(System.in);
    String input;
    System.out.println("Enter your operation please");
    input = scan.next();
    if(input.charAt(findsign(input))=='+'){
        answer = firstnumber(input)+secondnumber(input);
        System.out.println("Operation is addition");
        System.out.println("The answer is " + answer);
    }
    else if(input.charAt(findsign(input))=='-'){
        answer = firstnumber(input)-secondnumber(input);
        System.out.println("Operation is subtraction");
        System.out.println("The answer is " + answer);
    }
    else if(input.charAt(findsign(input))=='*'){
        answer = firstnumber(input)*secondnumber(input);
        System.out.println("Operation is multiplication");
        System.out.println("The answer is " + answer);
    }
    else if(input.charAt(findsign(input))=='/'){
        answer = firstnumber(input)/secondnumber(input);
        System.out.println("Operation is division");
        System.out.println("The answer is " + answer);
    }

}

public static int findsign(String input){
    int n=0;
    for (n=0;n<input.length();n++){
        if(input.charAt(n)=='+' || input.charAt(n)=='-' || input.charAt(n)=='*' || input.charAt(n)=='/'){
            break;
        }
    }
    return n;
}
public static int firstnumber(String input){

        String number1 = input.substring(0,findsign(input));
        int number = Integer.parseInt(number1);
        return number;
    }
public static int secondnumber(String input){
    String number2 = input.substring(findsign(input),input.length());
    int number = Integer.parseInt(number2);
    return number;
}


}

我不明白这有什么困难,但显然计算器不断执行添加,而不是他们指定的操作。我让他们打印输入的操作,以查看&#34; if&#34;陈述有效,而且有。但是,他们仍然继续表演。我不确定它是否过于简单我会感到困惑或者此时是什么......所以如果你能提供帮助那就太棒了。

2 个答案:

答案 0 :(得分:1)

在解析第二个数字时你不在一个人:

String number2 = input.substring(findsign(input)+1,input.length());
//                                              ^^

Demo.

添加有效,因为当您解析2+3并传递"+3"来解析int时,操作成功,因为+是有效的数字前缀。但是,如果您尝试使用2*3,则可以尝试解析"*3" int,这不再有效。

答案 1 :(得分:0)

secondnumber()应该有&#34; ... substring(findsign(输入)+ 1&#34;,实际上,对于3-2,它将返回3和-2,你将计算&#34; 3 - -2&#34;,再次为5,如&#34; 3 + 2&#34;。

调试器或一点System.out.println会有所帮助,就像尝试&#34; 3 * 2&#34;:

Exception in thread "main" java.lang.NumberFormatException: For input string: "*2"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    at java.lang.Integer.parseInt(Integer.java:569)
    at java.lang.Integer.parseInt(Integer.java:615)
    at Calculator.secondnumber(Calculator.java:51)
    at Calculator.main(Calculator.java:22)