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

如何解决整数数组运算程序中的NumberFormatException异常?

解决Java程序中的NumberFormatException异常

看起来你在实现整数数组与符号数组的运算程序时遇到了NumberFormatException,这个异常通常是因为尝试将非数字字符串转换为整数导致的,我来帮你分析可能的原因并给出完整的解决方案:

可能的异常触发点

从你给出的代码片段来看,主要问题集中在这几个方面:

  • 输入读取逻辑错误:比如用读取整数的方法去读取运算符(如+、/),直接触发转换异常
  • 符号数组初始化错误:符号数组的长度应该是整数数组长度减1(n个数字需要n-1个运算符),你的代码未完成这部分初始化
  • 输入时的换行符残留:nextInt()读取整数后会留下换行符,后续读取字符串时可能读到空内容,间接引发异常

完整修正代码及解释

下面是补全并优化后的代码,包含输入验证、异常处理和运算逻辑,彻底避免NumberFormatException:

import java.util.Scanner;

public class ArrayCalculator {
    public static void main(String args[]) {
        Scanner sc = new Scanner(System.in);
        
        // 读取整数数组长度
        System.out.println("Enter the size of the integer array:");
        int numLength = sc.nextInt();
        sc.nextLine(); // 消耗换行符,避免后续读取字符串时读到空内容
        
        int[] numArr = new int[numLength];
        // 读取整数数组,捕获NumberFormatException
        System.out.println("Enter " + numLength + " integers:");
        for (int i = 0; i < numLength; i++) {
            try {
                numArr[i] = Integer.parseInt(sc.nextLine().trim());
            } catch (NumberFormatException e) {
                System.out.println("Error: Please enter a valid integer for position " + (i+1));
                return; // 终止程序,也可以改为让用户重新输入
            }
        }
        
        // 初始化符号数组(长度为整数数组长度-1)
        int symLength = numLength - 1;
        String[] symArr = new String[symLength];
        // 读取并验证运算符
        System.out.println("Enter " + symLength + " operators (+, -, *, /):");
        for (int i = 0; i < symLength; i++) {
            String op = sc.nextLine().trim();
            // 验证运算符是否合法
            if (!op.matches("[+\\-*/]")) {
                System.out.println("Error: Invalid operator at position " + (i+1));
                return;
            }
            symArr[i] = op;
        }
        
        // 执行链式运算
        int result = numArr[0];
        for (int i = 0; i < symLength; i++) {
            switch (symArr[i]) {
                case "+":
                    result += numArr[i+1];
                    break;
                case "-":
                    result -= numArr[i+1];
                    break;
                case "*":
                    result *= numArr[i+1];
                    break;
                case "/":
                    if (numArr[i+1] == 0) {
                        System.out.println("Error: Division by zero is not allowed");
                        return;
                    }
                    result /= numArr[i+1]; // 整数除法会截断小数,若需浮点数可改为double类型
                    break;
                default:
                    System.out.println("Error: Unknown operator");
                    return;
            }
        }
        
        // 输出结果
        System.out.println("The result is: " + result);
        sc.close();
    }
}

关键优化说明

  1. 输入异常捕获:读取整数时用try-catch包裹Integer.parseInt(),一旦用户输入非数字内容,立即提示错误
  2. 运算符合法性校验:用正则表达式限制输入只能是+、-、*、/,避免非法字符干扰运算
  3. 换行符处理:调用sc.nextLine()消耗nextInt()后的换行符,防止后续读取字符串时出错
  4. 边界情况处理:增加了除以零的判断,避免触发算术异常

测试示例

输入:

Enter the size of the integer array:
4
Enter 4 integers:
1
2
3
4
Enter 3 operators (+, -, *, /):
+
/
*

输出:

The result is: 4

内容的提问来源于stack exchange,提问作者Niya Shameer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:16:11