Java计算器开发:如何在无限循环中交替输入Double与String?
问题分析与解决方案
你的代码抛出InputMismatchException主要有两个核心原因:
scanner.nextDouble()读取数字后,输入缓冲区中残留的换行符会被scanner.nextLine()直接读取,导致获取的运算符为空字符串。后续循环中程序会把用户输入的运算符当作数字读取,触发类型不匹配异常。- 输入逻辑顺序错误:当用户输入
=结束计算时,程序仍在尝试读取数字,直接触发异常。
修改后的代码
import java.util.InputMismatchException; import java.util.Scanner; public class Calculate { private static boolean stopper = true; private static double result; public static void calculate(Scanner scanner) { // 读取初始数字,作为计算的起点 try { result = scanner.nextDouble(); } catch (InputMismatchException e) { System.out.println("Неправильный ввод данных"); scanner.nextLine(); // 清除错误输入行,避免后续异常 return; } while (stopper) { try { // 用next()读取运算符,自动跳过换行、空格等空白字符 String symbol = scanner.next(); if (symbol.equals("=")) { stopper = false; System.out.println("Результат: " + result); } else if (symbol.equals("+")) { double a = scanner.nextDouble(); result += a; } // 可扩展添加-、*、/等运算符逻辑 } catch (InputMismatchException e) { System.out.println("Неправильный ввод данных"); scanner.nextLine(); // 清除错误输入,避免死循环 } } } public static void main(String[] args) { Scanner scanner = new Scanner(System.in); calculate(scanner); scanner.close(); } }
关键改动说明
- 调整输入顺序:先读取初始数字作为计算起点,再循环读取运算符,符合计算器的正常操作逻辑。
- 替换
nextLine()为next():next()会自动跳过空白字符(换行、空格),确保正确获取用户输入的运算符。 - 优化异常处理:添加
scanner.nextLine()清除错误输入行,避免后续循环重复读取错误内容导致死循环,同时移除break,让程序在错误输入后仍能继续运行。 - 修正结束逻辑:读取到
=时直接结束循环并输出结果,避免尝试读取数字的错误。
内容的提问来源于stack exchange,提问作者Матвей Шавлов
相关产品推荐
相关产品推荐

