如何解决整数数组运算程序中的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(); } }
关键优化说明
- 输入异常捕获:读取整数时用
try-catch包裹Integer.parseInt(),一旦用户输入非数字内容,立即提示错误 - 运算符合法性校验:用正则表达式限制输入只能是
+、-、*、/,避免非法字符干扰运算 - 换行符处理:调用
sc.nextLine()消耗nextInt()后的换行符,防止后续读取字符串时出错 - 边界情况处理:增加了除以零的判断,避免触发算术异常
测试示例
输入:
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
相关产品推荐
相关产品推荐

