一直循环直到输入了前哨值的Java程序

问题描述

总而言之,我正在尝试清理代码。该程序提示用户输入(a)dd,(s)提取,(m)最后,(d)ivide或(q)uit-每个字母都与if语句关联。 “ q”将是退出程序的标记值。用户将需要输入两个数字,然后可以通过上述操作之一执行该数字。我的问题是,我似乎无法解决为什么提示“输入第一个数字”和“您要(a)dd,(s)抽象,(m)最后,(d)ivide或(q)uit? ”。我可能正在寻找最简单的东西。我希望我的解释很清楚。此外,对于提高代码可读性的任何建议也将不胜感激。

目标是询问用户他们希望如何执行两个数字。选择后,他们将输入两个数字-立即加上总和。提出总和后,会再次询问他们选择哪种操作。

import java.util.Scanner;

public class ScratchCode {
  public static void main(String[] args) {
    
    Scanner input = new Scanner(System.in);
    String operationLetter;
    int firstNumber;
    int secondNumber;

    System.out.println("Hello! Welcome to the world's worst calculator.\n");

    do {
        System.out.println("Would you like to (a)dd,(s)ubtract,(m)ultiply,(d)ivide,or (q)uit?");
        operationLetter = input.nextLine();

        System.out.println("Enter first number.");
        firstNumber = input.nextInt();
    
        System.out.println("Enter second number.");
        secondNumber = input.nextInt();
    
        if (operationLetter.equalsIgnoreCase("a")) {
           int sum = firstNumber + secondNumber;
           System.out.println("Great. " +  firstNumber + " + " +  secondNumber + " = " + sum);
        }
    
        else if (operationLetter.equalsIgnoreCase("s")) {
            int sum = firstNumber - secondNumber;
            System.out.println("Great. " +  firstNumber + " - " +  secondNumber + " = " + sum);
        }
    
        else  if (operationLetter.equalsIgnoreCase("m")) {
            int sum = firstNumber * secondNumber;
            System.out.println("Great. " +  firstNumber + " * " +  secondNumber + " = " + sum);
        }
    
        else if (operationLetter.equalsIgnoreCase("d")) {
            int sum = firstNumber / secondNumber;
            System.out.println("Great. " +  firstNumber + " / " +  secondNumber + " = " + sum);
        }
    }
    while(!operationLetter.equalsIgnoreCase("q"));

    System.out.println("Goodbye !");
  }

}

解决方法

请如下更改您的前哨值的输入:

System.out.println("Would you like to (a)dd,(s)ubtract,(m)ultiply,(d)ivide,or (q)uit?");
operationLetter = input.next();

问题出在input.nextLine();

,

这不是一个尝试改善代码的答案,如果您重复某些代码,则首先创建一个方法,其次似乎是切换案例的完美用法,这是我的尝试,以证明这一点:

private void bestCalcEver() {
    Scanner input = new Scanner(System.in);
    String operationLetter;
    int firstNumber;
    int secondNumber;

    System.out.println("Hello! Welcome to the world's worst calculator.\n");

    do {
        System.out.println("Would you like to (a)dd,or (q)uit?");
        operationLetter = input.nextLine();

        System.out.println("Enter first number.");
        firstNumber = input.nextInt();

        System.out.println("Enter second number.");
        secondNumber = input.nextInt();


        switch (operationLetter.toLowerCase()) {
            case "a":
                printResult(firstNumber,secondNumber,firstNumber + secondNumber,"+");
                break;
            case "s":
                printResult(firstNumber,firstNumber - secondNumber,"-");
                break;
            case "m":
                printResult(firstNumber,firstNumber * secondNumber,"*");
                break;
            case "d":
                if (secondNumber == 0) {
                    System.out.println("Oops,I can't divide by 0 sorry =(");
                } else {
                    printResult(firstNumber,firstNumber / secondNumber,"/");
                }
                break;
            case "q":
                System.out.println("Goodbye !");
                break;
            default:
                System.out.println("Invalid operator,sorry");
                break;

        }


    } while(!operationLetter.equalsIgnoreCase("q"));


}

private void printResult(int firstNumber,int secondNumber,int result,String operator) {
    System.out.println("Great. " +  firstNumber + operator +  secondNumber + " = " + result);
}
,

要解决的问题:

  1. 缓冲区需要清理,它需要清理一些未使用的数据,由于input.nextLine();的调用会自动从缓冲区中获取,在您的情况下,这不是预期的行为,因此需要清理一下。
  2. 第二个哨兵的位置不在应有的位置,所以我稍微修改了循环,以便您可以比较
  3. 输入验证,可以做其他小的改进,我也跳过了

代码:

class ScratchCode {
    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);
        System.out.println("Hello! Welcome to the world's worst calculator.\n");

        System.out.println("Would you like to (a)dd,or (q)uit?");
        String operationLetter = input.nextLine();

        while (!operationLetter.equalsIgnoreCase("q")) {
            System.out.println("Enter first number.");
            int firstNumber = input.nextInt();

            System.out.println("Enter second number.");
            int secondNumber = input.nextInt();

            if (operationLetter.equalsIgnoreCase("a")) {
                int sum = firstNumber + secondNumber;
                System.out.println("Great. " + firstNumber + " + " + secondNumber + " = " + sum);
            } else if (operationLetter.equalsIgnoreCase("s")) {
                int sum = firstNumber - secondNumber;
                System.out.println("Great. " + firstNumber + " - " + secondNumber + " = " + sum);
            } else if (operationLetter.equalsIgnoreCase("m")) {
                int sum = firstNumber * secondNumber;
                System.out.println("Great. " + firstNumber + " * " + secondNumber + " = " + sum);
            } else if (operationLetter.equalsIgnoreCase("d")) {
                int sum = firstNumber / secondNumber;
                System.out.println("Great. " + firstNumber + " / " + secondNumber + " = " + sum);
            }

            // Buffer Cleanup
            input.nextLine();

            System.out.println("Would you like to (a)dd,or (q)uit?");
            operationLetter = input.nextLine();
        }

        System.out.println("Goodbye !");
    }

}

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...