我在基本计算器上编写作业,我的代码似乎很完美,但它有一个错误。
import java.util.Scanner;
public class Calculator {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in); // Define new Scanner
String answer = "yes";
double finalValue;
while (answer.equalsIgnoreCase("Yes")) {
System.out.print("Enter First Number: ");
String firstNumber = scanner.next(); // Define first number, and ask user for input
while (!firstNumber.matches("[-+]?[0-9]*\\.?[0-9]+([eE][-+]?[0-9]+)?")) {
System.out.print("Please enter number only: ");
firstNumber = scanner.nextLine();
}
System.out.print("Enter an operator (+, -, / or *): ");
char operator = scanner.next().charAt(0);
System.out.print("Enter Second Number: ");
String secondNumber = scanner.next();
while (!secondNumber.matches("[-+]?[0-9]*\\.?[0-9]+([eE][-+]?[0-9]+)?")) {
System.out.print("Please enter number only: ");
secondNumber = scanner.nextLine();
}
switch(operator) {
case '+':
finalValue = Double.parseDouble(firstNumber) + Double.parseDouble(secondNumber);
System.out.println(finalValue);
break;
case '-':
finalValue = Double.parseDouble(firstNumber) - Double.parseDouble(secondNumber);
System.out.println(finalValue);
break;
case '*':
finalValue = Double.parseDouble(firstNumber) * Double.parseDouble(secondNumber);
System.out.println(finalValue);
break;
case '/':
if(secondNumber.equals("0")) {
System.out.println("a number can not be divided by 0.");
} else {
finalValue = Double.parseDouble(firstNumber) / Double.parseDouble(secondNumber);
System.out.println(finalValue);
}
break;
default:
System.out.println("Operator entered incorrectly.");
break;
}
System.out.print("Do you want another operation? (type yes to continue): ");
answer = scanner.next();
}
System.out.println("Bye.");
}
}
当我编译它并在firstNumber或secondNumber中输入一些单词而不是数字时,它输出"请仅输入数字:"第一次两次,然后一次。我尽力解决它,但我不能请求帮助:(
答案 0 :(得分:0)
这种情况正在发生,因为您在scanner.nextLine();
scanner.next();
尝试按以下方式添加空白声明以避免此问题:
scanner.nextLine();
OR
将scanner.nextLine()
替换为scanner.next()
之后正在努力。请参考以下内容:
class Calculator {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in); // Define new Scanner
String answer = "yes";
double finalValue;
while (answer.equalsIgnoreCase("Yes")) {
System.out.print("Enter First Number: ");
String firstNumber = scanner.next(); // Define first number, and ask user for input
while (!firstNumber.matches("[-+]?[0-9]*\\.?[0-9]+([eE][-+]?[0-9]+)?")) {
System.out.print("Please enter number only: ");
firstNumber = scanner.next();
}
System.out.print("Enter an operator (+, -, / or *): ");
char operator = scanner.next().charAt(0);
System.out.print("Enter Second Number: ");
String secondNumber = scanner.next();
while (!secondNumber.matches("[-+]?[0-9]*\\.?[0-9]+([eE][-+]?[0-9]+)?")) {
System.out.print("Please enter number only: ");
secondNumber = scanner.nextLine();
}
switch(operator) {
case '+':
finalValue = Double.parseDouble(firstNumber) + Double.parseDouble(secondNumber);
System.out.println(finalValue);
break;
case '-':
finalValue = Double.parseDouble(firstNumber) - Double.parseDouble(secondNumber);
System.out.println(finalValue);
break;
case '*':
finalValue = Double.parseDouble(firstNumber) * Double.parseDouble(secondNumber);
System.out.println(finalValue);
break;
case '/':
if(secondNumber.equals("0")) {
System.out.println("a number can not be divided by 0.");
} else {
finalValue = Double.parseDouble(firstNumber) / Double.parseDouble(secondNumber);
System.out.println(finalValue);
}
break;
default:
System.out.println("Operator entered incorrectly.");
break;
}
System.out.print("Do you want another operation? (type yes to continue): ");
answer = scanner.next();
}
System.out.println("Bye.");
}
}
但是从未来的角度来看,最好的选择是扫描预期的数据类型,如scanner.nextInt()或scanner.nextDouble()
答案 1 :(得分:0)
我建议您每次都使用scanner.next()
解决此问题,不要使用scanner.nextDouble()
。我重写了你的代码并且它现在正在工作。我可以问你为什么不使用import java.util.Scanner;
public class Calculator {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in); // Define new Scanner
String answer = "yes";
double finalValue;
while (answer.equalsIgnoreCase("Yes")) {
System.out.print("Enter First Number: ");
Double firstNumber = null;
while (firstNumber == null) {
try {
firstNumber = Double.valueOf(scanner.nextLine());
} catch (NumberFormatException ex) {
System.out.println("Please enter number only.");
}
}
System.out.print("Enter an operator (+, -, / or *): ");
String line = null;
while (line == null || line.length() == 0) {
line = scanner.nextLine();
}
char operator = line.charAt(0);
System.out.print("Enter Second Number: ");
Double secondNumber = null;
while (secondNumber == null) {
try {
secondNumber = Double.valueOf(scanner.nextLine());
} catch (NumberFormatException ex) {
System.out.println("Please enter number only.");
secondNumber = null;
scanner.reset();
}
}
switch(operator) {
case '+':
finalValue = firstNumber + secondNumber;
System.out.println(finalValue);
break;
case '-':
finalValue = firstNumber - secondNumber;
System.out.println(finalValue);
break;
case '*':
finalValue = firstNumber * secondNumber;
System.out.println(finalValue);
break;
case '/':
if(secondNumber == 0d) {
System.out.println("a number can not be divided by 0.");
} else {
finalValue = firstNumber / secondNumber;
System.out.println(finalValue);
}
break;
default:
System.out.println("Operator entered incorrectly.");
break;
}
System.out.print("Do you want another operation? (type yes to continue): ");
answer = scanner.next();
}
System.out.println("Bye.");
}
}
?无论如何,请参阅下面的代码。
{{1}}
答案 2 :(得分:0)
您需要将firstNumber = scanner.nextLine();
替换为firstNumber = scanner.next();
,将secondNumber = scanner.nextLine();
替换为secondNumber = scanner.next();
。