Java数组元素成对交换代码开发遇NullPointerException异常
问题分析与修正方案
我来帮你排查下这段代码里的问题,你遇到的NullPointerException和逻辑错误主要来自这几个核心问题:
原代码的错误点
- 赋值方向完全颠倒:你当前是把刚初始化的
outputArray(所有元素都是null)的值赋值给inputArray,这不仅会破坏原数组的内容,还会因为outputArray的空值直接触发空指针异常。我们的目标是生成交换后的新数组,应该是从inputArray取元素,交换后存入outputArray才对。 - 数组越界错误:代码里的
inputArray[inputArray.length]完全不符合数组索引规则——数组的合法索引范围是0到inputArray.length - 1,直接使用length作为索引会抛出数组越界异常。 - 边界逻辑错误:你在循环内每次都判断数组长度是否为奇数,且处理逻辑错误。正确的做法是在循环中判断当前索引的下一个位置是否存在,再执行交换,否则直接保留最后一个元素。
修正后的代码
public static String[] pairSwap(String[] inputArray) { // 先处理输入为null的情况,避免空指针 if (inputArray == null) { return null; } String[] outputArray = new String[inputArray.length]; for (int i = 0; i < inputArray.length; i += 2) { // 检查下一个索引是否合法,避免越界 if (i + 1 < inputArray.length) { // 交换元素存入新数组 outputArray[i] = inputArray[i + 1]; outputArray[i + 1] = inputArray[i]; } else { // 数组长度为奇数时,最后一个元素直接保留 outputArray[i] = inputArray[i]; } } return outputArray; }
修正说明
- 增加了输入数组的
null判断,避免传入null时直接抛出异常 - 反转了赋值方向:从原数组
inputArray读取元素,交换后写入新数组outputArray - 在循环内通过
i + 1 < inputArray.length判断是否可以执行交换,既避免了数组越界,又自然处理了奇数长度数组的最后一个元素 - 移除了原代码中错误的越界赋值语句
内容的提问来源于stack exchange,提问作者user13088248
相关产品推荐
相关产品推荐

