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

Java数组匹配求和逻辑不符预期,请求排查代码错误

数组处理逻辑错误排查与修正

需求说明

现有两个String数组:

String[] array1 = {"1", "2", "3", "4","5","6","7"};
String[] array2= {"apple", "", "", "banana", "", "", "orange"};

预期输出为:

String[] desiredOutput = {"1","5","4","11","7"};

逻辑规则

  • 当array2对应位置为非空字符串时,直接将array1对应位置的值加入结果数组
  • 当array2出现连续空字符串时,将对应位置的array1数值求和后加入结果数组
    具体示例:
  • array2[0] = "apple" → 结果数组加入"1",即{"1"}
  • array2[1]、array2[2]为空 → 求和2+3=5,结果数组变为{"1","5"}
  • array2[3] = "banana" → 结果数组加入"4",即{"1","5","4"}
  • array2[4]、array2[5]为空 → 求和5+6=11,结果数组变为{"1","5","4","11"}
  • array2[6] = "orange" → 结果数组加入"7",即{"1","5","4","11","7"}

现有代码的逻辑错误

你写的代码完全偏离需求逻辑,核心问题如下:

  1. 类型转换错误:代码试图将array2的非空字符串(比如"apple")转成整数,直接会抛出NumberFormatException,这是致命错误。
  2. 未处理连续空值的合并逻辑:代码是逐个位置单独处理,没有跟踪连续空值的区间,结果数组长度和原数组一致,完全不符合合并连续空值对应array1数值的要求。
  3. 运算逻辑错误:需求是根据array2的空值状态决定直接取值还是合并求和,而你的代码错误地将array1和array2的数值相加,完全违背需求。

修正后的代码

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

public class ArrayProcessor {
    public static void main(String[] args) {
        String[] array1 = {"1", "2", "3", "4", "5", "6", "7"};
        String[] array2 = {"apple", "", "", "banana", "", "", "orange"};
        
        List<String> resultList = new ArrayList<>();
        int continuousSum = 0;
        
        for (int i = 0; i < array2.length; i++) {
            if (array2[i].isEmpty()) {
                // 遇到空值,累加对应array1的数值
                continuousSum += Integer.parseInt(array1[i]);
            } else {
                // 遇到非空值,先处理之前的连续空值累加结果
                if (continuousSum != 0) {
                    resultList.add(String.valueOf(continuousSum));
                    continuousSum = 0;
                }
                // 加入当前array1的对应值
                resultList.add(array1[i]);
            }
        }
        
        // 处理数组末尾可能剩余的连续空值累加
        if (continuousSum != 0) {
            resultList.add(String.valueOf(continuousSum));
        }
        
        // 转换为数组并按格式输出
        String[] desiredOutput = resultList.toArray(new String[0]);
        System.out.print("{");
        for (int i = 0; i < desiredOutput.length; i++) {
            System.out.print("\"" + desiredOutput[i] + "\"");
            if (i < desiredOutput.length - 1) {
                System.out.print(",");
            }
        }
        System.out.println("}");
    }
}

代码说明

  1. 用ArrayList动态存储结果,因为结果数组长度无法提前确定
  2. 用continuousSum变量跟踪连续空值对应的array1数值之和
  3. 遍历过程中:
    • 遇到空值就累加对应array1的数值
    • 遇到非空值时,先把之前的累加结果(如果有)加入列表,再加入当前array1的值,然后重置累加器
  4. 遍历结束后,检查是否还有未处理的累加值(比如数组末尾是连续空值的情况),加入列表
  5. 最后将列表转为数组并按要求格式输出

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 12:53:16