我自己写的Calculator.java有什么问题?

What's wrong with my self-written Calculator.java?

我在 java 中写了一个小计算器,但它没有做它应该做的事..:p

因此,如果我在控制台中输入 "a",它会按要求进行加法。但是如果我想做另一个操作,例如乘法,输入 "m" 什么都不做。

其他操作似乎只有在控制台中按此顺序 (a,s,m,d) 执行时才有效,可能是因为这是下面代码中的顺序。

但是我该如何解决这个问题呢?我想如果我输入 "m" 乘法就完成了,或者如果我输入 "d" 那除法就完成了。我这里有什么错误?

import java.util.Scanner;
public class Calculator{
    public static void main(String[] args){
        double x = Double.parseDouble(args[0]);
        double y = Double.parseDouble(args[1]);
        Scanner input = new Scanner(System.in);

        System.out.println("a: addition");
        System.out.println("s: subtraction");
        System.out.println("m: multiplication");
        System.out.println("d: division");

        if(input.nextLine().equals("a")){
            double add;
            add=x+y;
            System.out.println(add);
        }
        else if(input.next().equals("s")){
            double sub;
            sub=x-y;
            System.out.println(sub);
        }
        else if(input.next().equals("m")){
            double mul;
            mul=x*y;
            System.out.println(mul);
        }
        else if(input.next().equals("d")){
            double div;
            div=x/y;
            System.out.println(div);
        }
    }
}

阅读您的输入,然后执行您的逻辑。

import java.util.Scanner;
public class Calculator{
    public static void main(String[] args){
        double x = Double.parseDouble(args[0]);
        double y = Double.parseDouble(args[1]);
        Scanner input = new Scanner(System.in);

        System.out.println("a: addition");
        System.out.println("s: subtraction");
        System.out.println("m: multiplication");
        System.out.println("d: division");

        String operator = input.nextLine();

        if(operator.equals("a")){
            double add;
            add=x+y;
            System.out.println(add);
        }
        else if(operator.equals("s")){
            double sub;
            sub=x-y;
            System.out.println(sub);
        }
        else if(operator.equals("m")){
            double mul;
            mul=x*y;
            System.out.println(mul);
        }
        else if(operator.equals("d")){
            double div;
            div=x/y;
            System.out.println(div);
        }
    }
}

您面临的问题是每个 if 语句都从输入读取并耗尽 System.in 的输入。因此,它读取一行并将其与 "a" 进行比较。如果它是 "a",它会像你说的那样进行加法运算。 否则,它继续,尝试从System.in读取下一个字符,并将其与"s"进行比较。 "m" 和 "d".

与其读取那么多输入,您真正想要的是读取一次输入 (String operator = input.nextLine()) 并将该字符串与您的运算符字符串进行比较。

如果你想一个接一个地执行多个操作,你应该从应用程序中检索运算符和数字,并使用循环来允许它,而不是在你的程序中提供数字作为参数。
否则,您应该 运行 您的程序需要执行一些计算,这似乎不适合计算器用例。

此外,您应避免混合使用 input.nextLine()input.next(),否则可能会出现一些不可预知的结果。

import java.util.Scanner;
public class Calculator{

    public static void main(String[] args){         
       Scanner input = new Scanner(System.in);

       while (true){
         System.out.println("a: addition");
         System.out.println("s: subtraction");
         System.out.println("m: multiplication");
         System.out.println("d: division");
         System.out.println("q: quit");

         String operator = input.next();
         if (operator.equals("q"){
           return;
         }

         double x = input.nextDouble();
         double y = input.nextDouble();

        if(operator.equals("a")){
            double add;
            add=x+y;
            System.out.println(add);
        }
        else if(operator.equals("s")){
            double sub;
            sub=x-y;
            System.out.println(sub);
        }
        else if(operator.equals("m")){
            double mul;
            mul=x*y;
            System.out.println(mul);
        }
        else if(operator.equals("d")){
            double div;
            div=x/y;
            System.out.println(div);
        }

         else{
           System.out.println("enter one of the proposed options");
         }

      }
    }
}

每次您调用 next() 或 nextLine() 时,它都会在 运行 时等待输入。 因此,首先,每个输入仅调用一次 next() 或 nextLine()。

要继续执行操作,您必须 运行 通过一个循环。您可以按如下方式使其更具交互性:

import java.util.Scanner;
public class Calculator{
    public static void main(String[] args){
        double x = Double.parseDouble(args[0]);
        double y = Double.parseDouble(args[1]);

do{

        System.out.println("a: addition");
        System.out.println("s: subtraction");
        System.out.println("m: multiplication");
        System.out.println("d: division");

    String input = new Scanner(System.in).next();

    if(input.equals("a")){
            double add;
            add=x+y;
            System.out.println(add);
        }
        else if(input.equals("s")){
            double sub;
            sub=x-y;
            System.out.println(sub);
        }
        else if(input.equals("m")){
            double mul;
            mul=x*y;
            System.out.println(mul);
        }
        else if(input.equals("d")){
            double div;
            div=x/y;
            System.out.println(div);
        }

    System.out.print("Want to calculate more (Y/N) : ");
    String choice = new Scanner(System.in).next();
    if(choice.equals("N") || choice.equals("n"))
        break;
    else if(choice.equals("Y") || choice.equals("y"))
        continue;
    else{
            System.out.println("Bad choice");
            break;
    }

}while(true);
    }
}