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

时间:2016-12-17 17:19:27

标签: java algorithm syntax calculator

我在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);
        }
    }
}

3 个答案:

答案 0 :(得分:1)

阅读你的输入,然后做你的逻辑。

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())并将该字符串与您的运算符字符串进行比较,而不是阅读如此多的输入。

答案 1 :(得分:0)

如果要逐个执行多个操作,则应从应用程序中检索运算符和数字,并使用循环来允许它而不是在程序中将数字作为参数提供。
否则你应该尽可能多地运行你的程序来执行一些计算,这对于计算器用例来说似乎是不可取的。

此外,你应该避免混合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");
         }

      }
    }
}

答案 2 :(得分:0)

每次调用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);
    }
}