【问题标题】:Continuity Issue in Java CalculatorJava 计算器中的连续性问题
【发布时间】:2020-11-13 23:10:26
【问题描述】:

我是Java新手,正在做一个计算器APP。

我试图让我的计算器在“无效输入”之后的 else 语句之后不断提示用户输入正确答案(键入 Y 或 N)。
我希望程序在最终输入正确的输入后继续计算。

我玩过嵌入的while 循环,但最终以无限循环或无分辨率终止的循环结束。代码如下。

import java.util.Scanner;
class Calculate {
    public static void.main(String[] args) {
            System.out.println("Welcome To Calculator!");
            System.out.println("*************************************************************************");
            Scanner userinput = new Scanner(System.in);
            double num1, num2;
            String choice;
            boolean youDecide = true;
            while(youDecide == true) {
                System.out.println("Please enter a number: ");
                num1 = userinput.nextDouble();
                System.out.println("Please enter an available operator (+, -, *, /): ");
                char operator = userinput.next().charAt(0);
                System.out.println("Please enter another number: ");
                num2 = userinput.nextDouble();
                double output;      
                switch(operator) 
                {
                case '+':
                    output = num1 + num2;
                    break;
                
                case '-':
                    output = num1 - num2;
                    break;
                
                case '*':
                    output = num1 * num2;
                    break;
                
                case '/':
                    output = num1 / num2;
                        if(num2 == 0)
                            System.out.println("Math error! A number cannot be divided by zero.");
                    break;
                default:
                    System.out.println("Invalid input. Please enter an available operator, i.e (+, -, *, /): ");
                    return;
                }
                System.out.println("*************************************************************************");
                System.out.println("The answer is: " + "\n" + output);
                System.out.println("*************************************************************************");
                System.out.println("Would you like to calculate again?");
                System.out.println("Please enter Y for yes, or N for no");
                choice = userinput.next();
            
                if(choice.equalsIgnoreCase("Y")) {
                    System.out.println("Okay. Let's continue!");
                    System.out.println("*************************************************************************");
                    youDecide = true;
                }
                else if(choice.equalsIgnoreCase("N")) {
                    System.out.println("*************************************************************************");
                    System.out.println("Okay. Thanks for using Calculator. Goodbye!");
                    System.exit(0);
                }
                else {
                    System.out.println("Invalid input. Please try again...");   
                    System.out.println("*************************************************************************");
                    youDecide = false;
                }
        }
    
    }

}

【问题讨论】:

  • public static void.main() 是如何编译的?始终复制/粘贴代码,切勿在 StackOverflow 问题中重新输入代码。
  • 为什么在无效输入部分设置youDecide = false?这告诉循环结束,它属于'N' 选项而不是System.exit(0)
  • 吉姆,我是通过手机发布的,所以我必须编辑文本才能在问题中发布代码。我确实粘贴了代码,但该网站抱怨缩进,所以这就是结果。
  • 此外,System.exit(0) 似乎是在提示用户决定继续并输入“N”时让程序终止的唯一方法。我正在为 else 语句使用嵌入式 while 循环,在该循环中,用户最终输入正确的输入后,主循环将继续。这是我遇到问题的部分,因为我最终遇到了无限嵌入式循环或提前终止的循环。

标签: java switch-statement calculator


【解决方案1】:

我对您的代码进行了一些更改和修改

import java.util.Scanner;

class Calculator {
    public static void main(String[] args) {
        System.out.println("Welcome To Calculator!");
        System.out.println("*************************************************************************");
        Scanner userinput = new Scanner(System.in);
        double num1, num2;
        String choice;

        //the "youDecide" variable is not needed at all
        while (true) {
            System.out.println("Please enter a number: ");
            num1 = userinput.nextDouble();
            System.out.println("Please enter an available operator (+, -, *, /): ");
            char operator = userinput.next().charAt(0);
            System.out.println("Please enter another number: ");
            num2 = userinput.nextDouble();
            double output;
            switch (operator) {
            case '+':
                output = num1 + num2;
                break;

            case '-':
                output = num1 - num2;
                break;

            case '*':
                output = num1 * num2;
                break;

            case '/':
                output = num1 / num2;
                if (num2 == 0) {
                    System.out.println("Math error! A number cannot be divided by zero.");
                }
                break;
            default:
                System.out.println("Invalid input. Please enter an available operator, i.e (+, -, *, /): ");
                continue; //changed from "return" you don't want to exit, just to skip to the next execution of the loop
            }
            System.out.println("*************************************************************************");
            System.out.println("The answer is: " + "\n" + output);
            System.out.println("*************************************************************************");
            System.out.println("Would you like to calculate again?");
            System.out.println("Please enter Y for yes, or N for no");
            choice = userinput.next();

            if (choice.equalsIgnoreCase("Y")) {
                System.out.println("Okay. Let's continue!");
                System.out.println("*************************************************************************");
            } else if (choice.equalsIgnoreCase("N")) {
                System.out.println("*************************************************************************");
                System.out.println("Okay. Thanks for using Calculator. Goodbye!");
                System.exit(0);
            } else {
                System.out.println("Invalid input. Please try again...");
                System.out.println("*************************************************************************");
            }
        }

    }
}

【讨论】:

  • 谢谢Javaman。应用您的编辑后,一切仍然有效。现在我将如何让程序不断提示用户输入正确的输入,直到最终输入,然后返回到主循环?我指的是这部分代码: } else { System.out.println("Invalid input. Please try again..."); System.out.println("************************************************ ******************************"); } } } }
【解决方案2】:

您需要一个while 循环来确保值正确。

当用户键入字符时,您需要在代码中执行逻辑,否则您必须更改许多代码行,或者再次要求所有值。

我认为对于初学者来说最简单的方法是使用这个循环:

char operator;
while(true) {
    operator = userinput.next().charAt(0);
    if(operator=='+' || operator == '-' || operator == '*' || operator == '/') {
        break;
    }else {
        System.out.println("Please enter a valid operator: ");
    }
}

存在许多更优雅的方法来做到这一点。但我认为对于初学者来说是理解和实现代码的最简单方法。

这个循环只是为了确保用户输入一个有效的字符。虽然角色不是其中之一,但循环将进行迭代。

您必须将此代码放在要求有效运算符的该行下方。

【讨论】:

    【解决方案3】:

    在添加 J.F. 和 Javaman 建议的编辑以及一些研究之后,我能够通过在我的代码中添加以下行来解决问题:

    import java.util.InputMismatchException;
    import java.util.Scanner;
    
    
    class Calculator {
        public static void main(String[] args) {
            System.out.println("Welcome To Calculator!");
            System.out.println("*************************************************************************");
            Scanner userinput = new Scanner(System.in);
            char operator;
            double num1, num2;
            String choice;
            while(true) {
                System.out.println("Please enter a number: ");
                num1 = userinput.nextDouble();
                System.out.println("Please enter an available operator (+, -, *, /): ");
                while(true) {
                    operator = userinput.next().charAt(0);  
                    if(operator == '+' || operator == '-' || operator == '*' || operator == '/') {
                        break;
                    }else {
                        System.out.println("Invalid input. Please enter an available operator, i.e (+, -, *, /): ");
                    }
                }
                System.out.println("Please enter another number: ");
                num2 = userinput.nextDouble();
                double output;
        
                switch(operator) {
                case '+':
                    output = num1 + num2;
                    break;      
                case '-':
                    output = num1 - num2;
                    break;  
                case '*':
                    output = num1 * num2;
                    break;      
                case '/':
                    output = num1 / num2;
                    break;
                default:
                    System.out.println("Invalid input. Please enter an available operator, i.e (+, -, *, /): ");
                    continue;
                }
                System.out.println("*************************************************************************");                
                if(num2 == 0) {
                    System.out.println("Math error! A number cannot be divided by zero.");
                }else {
                    System.out.println("The answer is: " + "\n" + output);
                } 
                System.out.println("*************************************************************************");
                System.out.println("Would you like to calculate again?");
                System.out.println("Please enter Y for yes, or N for no");
                choice = userinput.next();
         
                if(choice.equalsIgnoreCase("Y")) {
                    System.out.println("Okay. Let's continue!");
                    System.out.println("*************************************************************************");
                }else if(choice.equalsIgnoreCase("N")) {
                    System.out.println("*************************************************************************");
                    System.out.println("Okay. Thanks for using Calculator. Goodbye!");
                    System.exit(0);
                }else {
                    System.out.println("Invalid input. Please try again...");   
                    System.out.println("*************************************************************************");        
                    **while (!("Y").equalsIgnoreCase(choice) && !("N").equalsIgnoreCase(choice)) {
                        System.out.println("Invalid input. Please try again...");   
                        System.out.println("*************************************************************************");        
                        System.out.println("Please enter Y for yes, or N for no");
                        choice = userinput.next();
                        if(choice.equalsIgnoreCase("Y")) {
                            System.out.println("Okay. Let's continue!");
                            System.out.println("*************************************************************************");
                        }else if(choice.equalsIgnoreCase("N")) {
                            System.out.println("*************************************************************************");
                            System.out.println("Okay. Thanks for using Calculator. Goodbye!");
                            System.exit(0);**
                        }
                    }
                }
            }
       }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-04
      • 1970-01-01
      • 2021-11-10
      • 1970-01-01
      • 1970-01-01
      • 2016-12-03
      • 2020-10-08
      • 1970-01-01
      相关资源
      最近更新 更多