问题描述
总而言之,我正在尝试清理代码。该程序提示用户输入(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);
}
,
要解决的问题:
- 缓冲区需要清理,它需要清理一些未使用的数据,由于
input.nextLine();
的调用会自动从缓冲区中获取,在您的情况下,这不是预期的行为,因此需要清理一下。 - 第二个哨兵的位置不在应有的位置,所以我稍微修改了循环,以便您可以比较
- 输入验证,可以做其他小的改进,我也跳过了
代码:
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 !");
}
}