You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java简易计算器输入兼容问题求助:支持两种输入格式实现

兼容两种输入格式的简易计算器实现方案

嘿,我来帮你搞定这个兼容两种输入格式的问题!你的当前代码之所以会崩溃,是因为它固定按「数字→数字→运算符」的顺序读取输入,当用户输入「数字→运算符→数字」格式时,第二个nextInt()会试图读取运算符字符串,直接抛出InputMismatchException。

下面是一个简单的解决方案,核心思路是先收集所有输入元素,再动态区分运算符和数字,不管输入顺序如何都能正确识别:

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Calculator {
    public static void main(String[] args) {
        Scanner kb = new Scanner(System.in);
        System.out.println("Enter what you want to calculate");
        String line = kb.nextLine();
        Scanner scan = new Scanner(line);
        
        // 把输入的所有元素收集到列表中
        List<String> elements = new ArrayList<>();
        while (scan.hasNext()) {
            elements.add(scan.next());
        }
        
        // 初始化变量,准备提取数字和运算符
        int num1 = 0, num2 = 0;
        char operator = ' ';
        
        // 遍历元素,区分数字和运算符
        for (String elem : elements) {
            // 判断是否是合法运算符(长度为1,且属于四则运算符号)
            if (elem.length() == 1 && "+-*/".contains(elem)) {
                operator = elem.charAt(0);
            } else {
                // 尝试将元素转为数字,这里可以加异常处理防止非法输入
                try {
                    if (num1 == 0) {
                        num1 = Integer.parseInt(elem);
                    } else {
                        num2 = Integer.parseInt(elem);
                    }
                } catch (NumberFormatException e) {
                    System.out.println("Error: Invalid number input");
                    return;
                }
            }
        }
        
        // 检查是否获取到了合法的运算符和两个数字
        if (operator == ' ' || (num1 == 0 && num2 == 0)) {
            System.out.println("Error: Invalid input format");
            return;
        }
        
        // 执行计算并输出结果
        int result = 0;
        switch (operator) {
            case '+':
                result = num1 + num2;
                break;
            case '-':
                result = num1 - num2;
                break;
            case '*':
                result = num1 * num2;
                break;
            case '/':
                if (num2 == 0) {
                    System.out.println("Error: Cannot divide by zero");
                    return;
                }
                result = num1 / num2;
                break;
            default:
                System.out.println("Error: Invalid operator");
                return;
        }
        
        System.out.println("Result: " + result);
    }
}

关键逻辑说明:

  • 收集输入元素:先用Scanner把整行输入拆分成独立的字符串元素,存入列表,这样就不用关心输入顺序了。
  • 动态识别运算符:遍历列表时,判断元素是否是长度为1的四则运算符号,是的话标记为运算符。
  • 提取数字:剩下的两个元素尝试转为整数,分别赋值给num1和num2,同时加了try-catch处理非数字输入的情况。
  • 异常防护:额外检查了运算符缺失、数字缺失、除零等异常场景,避免程序崩溃。

这样修改后,不管用户输入5 5 *还是5 * 5,程序都能正确处理啦!

内容的提问来源于stack exchange,提问作者John Erwin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:19:10