我如何正确编码这个java计算器?

时间:2015-06-27 03:09:00

标签: java

我正在创建一个java计算器,我遇到的情况涉及我的java扫描程序无法再接受任何输入。
以下是我正在使用的代码:

import java.util.Scanner;

class RealCalc {

    public static void main(String args[]) {
        Scanner bucky = new Scanner(System.in);
        Scanner reason = new Scanner(System.in);
        Scanner finalProduct = new Scanner(System.in);
        double fnum, snum, answer;
        String YesNo;
        String Multiply;
        String Add;
        String Divide;
        String Subtract;
        String operation;

        // Time to declare the string's value
        Multiply = ("Multiply");
        Divide = ("Divide");
        Subtract = ("Subtract");
        Add = ("Add");

        System.out.println("Hello, my name is Cortana,"
                + " would you like to perform operations with me?");

        YesNo = reason.nextLine();
        if (YesNo.equals("Yes")) {
            System.out.println("Good choice!");
            System.out.println(" ");

            System.out.println("Enter your first number");
            fnum = bucky.nextDouble();
            System.out.println("Enter your second number");
            snum = bucky.nextDouble();

            System.out.println("What do you want me to do with these numbers?");
            operation = finalProduct.nextLine();
            if (operation.equals(Multiply)) {

                System.out.println(fnum * snum);

            } else {

                System.out.println("I do not recognize this operation");
            }
        }
    }
}

所以基本上问题接近尾声当我试图找到一种方法来编码一个它要求你输入你想要执行的操作的东西。
如果你说Multiply,Divide,Add或Subtract,它将使用firstNum和secondNum(fnum,snum)执行那个受尊重的操作,但如果它不是这4个操作,它会说"我不认识这个操作。
现在这并不困难。问题是在操作中重试输入。
当它说"我不认识"使用(eclipse)的程序不允许我输入任何更多的数据 请帮忙。

4 个答案:

答案 0 :(得分:3)

以下是另一种简单的方法:使用while(true)中的问题包装代码区域,并在答案时使用break完成

 while (true) {
     System.out.println("What do you want me to do with these numbers?");
        operation = finalProduct.nextLine();

        if (operation.equals(Multiply)){

            System.out.println(fnum * snum);
            break;

        }else{

            System.out.println("I do not recognize this operation");

        }
     }

这样,每次用户输入错误操作时,您的应用程序都会保持循环,并且只有在他输入Multiply时才会完成

while(true)之类的构造用于创建无限循环,因此while块中的所有代码都将继续运行,除非它遇到中断,这只有在他输入正确的运算符和程序之后才会发生输出答案。否则,如果他输入的内容不正确,程序将回答I do not recognize this operation并再次请求他再次输入操作员重新开始

答案 1 :(得分:1)

试试这个:

String answer="";
String option="";

boolean status=true;
while(status){
Scanner num=new Scanner(System.in);
Scanner lin=new Scanner(System.in);
Scanner opt=new Scanner(System.in);


double numA,numB,result=0;

System.out.println("\"WELCOME TO JAVA CALCULATOR\"");
System.out.println("Enter The First Number");
numA=num.nextDouble();
System.out.println("Enter The Second Number");
numB=num.nextDouble();
System.out.println("What You Want To Calculate?");
answer=lin.nextLine();

if(answer.equals("+")){
    result=numA+numB;}
if(answer.equals("-")){
    result=numA-numB;}
if(answer.equals("*")){
    result=numA*numB;}
if(answer.equals("/")){
    result=numA/numB;}
System.out.println("The Result Is:"+result);
System.out.println("Do You Want To Contenue?");
option=opt.nextLine();

if(option.equals("y")){
    status=true;}
if(option.equals("n")){
    System.exit(0);

答案 2 :(得分:0)

提示:在结尾处使用while(continue == 'Y')循环语句,例如“如果要继续,则按Y键或任何键终止”。

while中的位置和内容取决于您想要达到的目标。如果要接收所有新数据(fnum, snum, operation),则while循环必须在行

之前开始
System.out.println("Enter your first number");

如果您只想让用户重新输入操作,请使用while循环

System.out.println("Enter your first number");

这是基本版本。你当然可以更多地附魔。

答案 3 :(得分:0)

工作计算器(如果无法识别操作,会重新提示用户):

import java.util.Scanner;

class RealCalc {

    // Declare the constants
    private static final String YES = "YES";

    private static final String MULTIPLY = "Multiply";
    private static final String DIVIDE = "Divide";
    private static final String SUBTRACT = "Subtract";
    private static final String ADD = "Add";

    public static void main(String args[]) {

        // Using one only Scanner
        Scanner sc = new Scanner(System.in);
        double fnum, snum;

        System.out.println("Hello, my name is Cortana,"
                + " would you like to perform operations with me?");

        // Use equalsIgnoreCase to make it case-insensitive
        if(sc.nextLine().equalsIgnoreCase(YES)) {

            System.out.println("Good choice!\n");

            System.out.print("Enter your first number: ");
            fnum = sc.nextDouble();
            System.out.print("Enter your second number: ");
            snum = sc.nextDouble();

            // This is used to clear the '\n' character following the previous
            // integer input
            sc.nextLine();

            // Call the function to perform arithmetic operations
            performOperation(sc, fnum, snum);
        }

        System.out.println("Thank you!");
    }

    public static void performOperation(Scanner sc, double fnum, double snum) {

        System.out.println("\n" + MULTIPLY + ", " + DIVIDE + ", " + SUBTRACT + ", or " + ADD);
        System.out.println("What do you want me to do with these numbers?");    
        String operation = sc.nextLine();

        System.out.println();
        if(operation.equalsIgnoreCase(MULTIPLY)) {
            System.out.printf("%8.3f * %8.3f = %8.3f%n%n", fnum, snum, fnum * snum);
        }
        else if(operation.equalsIgnoreCase(DIVIDE)) {
            System.out.printf("%8.3f / %8.3f = %8.3f%n%n", fnum, snum, fnum / snum);
        }
        else if(operation.equalsIgnoreCase(SUBTRACT)) {
            System.out.printf("%8.3f - %8.3f = %8.3f%n%n", fnum, snum, fnum - snum);
        }
        else if(operation.equalsIgnoreCase(ADD)) {
            System.out.printf("%8.3f + %8.3f = %8.3f%n%n", fnum, snum, fnum + snum);
        }
        else {
            System.out.println("Sorry, I do not recognize this operation.\n");

            // Call this function again to re-prompt the user for a valid operation
            performOperation(sc, fnum, snum);
        }
    }
}

输出(分部):

Hello, my name is Cortana, would you like to perform operations with me?
yes
Good choice!

Enter your first number: 10
Enter your second number: 20

Multiply, Divide, Subtract, or Add
What do you want me to do with these numbers?
no

Sorry, I do not recognize this operation.


Multiply, Divide, Subtract, or Add
What do you want me to do with these numbers?
haha

Sorry, I do not recognize this operation.


Multiply, Divide, Subtract, or Add
What do you want me to do with these numbers?
divide

  10.000 /   20.000 =    0.500

Thank you!

注意:

  • 仅声明一个扫描程序
  • 使用static final关键字将“是”,“乘法”等声明为常量
  • 使用equalsIgnoreCase使比较不区分大小写
  • 在要求执行操作之前,使用sc.nextLine();清除上一个整数输入后的'\n'字符
  • 使用if - elseif - else完成不同的选项
  • 存储提示用户在函数内部执行操作的代码(performOperation),如果“无法识别操作”,则再次调用该函数