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

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;
}

修正说明

  1. 增加了输入数组的null判断,避免传入null时直接抛出异常
  2. 反转了赋值方向:从原数组inputArray读取元素,交换后写入新数组outputArray
  3. 在循环内通过i + 1 < inputArray.length判断是否可以执行交换,既避免了数组越界,又自然处理了奇数长度数组的最后一个元素
  4. 移除了原代码中错误的越界赋值语句

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 00:02:43