Java简易计算器无法运行,求故障排查帮助(计算机科学新手)
Java简易计算器故障排查与修复
代码中的核心问题及修复方案
重复创建Scanner对象
每次输入都实例化新的Scanner会导致输入缓冲区混乱。比如调用nextDouble()后,控制台输入的换行符会残留在缓冲区中,后续的nextLine()会直接读取这个空行,导致运算符输入被跳过。
修复:只创建一个Scanner实例,复用它处理所有输入。方法名拼写错误
代码中charart()是拼写错误,正确的方法名是charAt(0),用于获取输入字符串的第一个字符。这个错误会直接导致编译失败。缺少默认分支
当用户输入的运算符不在+、-、*、/范围内时,switch语句没有任何输出,程序行为不明确。
修复:添加default分支提示用户输入无效运算符。未处理除数为0的异常
当第二个数字为0时,除法运算会抛出ArithmeticException,导致程序崩溃。
修复:在除法分支中添加判断,避免除以0的情况。
修复后的完整代码
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("Willkommen Beim Taschenrechner!!"); System.out.println("Bitte gibt die 1.te Zahl ein:"); double zahl1 = scanner.nextDouble(); // 读取nextDouble残留的换行符,避免后续nextLine读取空内容 scanner.nextLine(); System.out.println("Bitte gib den Operator ( + , - , * , / ) ein:"); char operator = scanner.nextLine().trim().charAt(0); System.out.println("Bitte gib nun die 2.te Zahl ein:"); double zahl2 = scanner.nextDouble(); switch (operator) { case '+' : System.out.println(zahl1 + zahl2); break; case '-' : System.out.println(zahl1 - zahl2); break; case '*' : System.out.println(zahl1 * zahl2); break; case '/' : if (zahl2 == 0) { System.out.println("Fehler: Division durch Null ist nicht erlaubt!"); } else { System.out.println(zahl1 / zahl2); } break; default: System.out.println("Ungültiger Operator! Bitte nutze +, -, * oder /."); } scanner.close(); } }
内容的提问来源于stack exchange,提问作者Sebastian Kramer Garfias
相关产品推荐
相关产品推荐

