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"}
现有代码的逻辑错误
你写的代码完全偏离需求逻辑,核心问题如下:
- 类型转换错误:代码试图将array2的非空字符串(比如
"apple")转成整数,直接会抛出NumberFormatException,这是致命错误。 - 未处理连续空值的合并逻辑:代码是逐个位置单独处理,没有跟踪连续空值的区间,结果数组长度和原数组一致,完全不符合合并连续空值对应array1数值的要求。
- 运算逻辑错误:需求是根据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("}"); } }
代码说明
- 用
ArrayList动态存储结果,因为结果数组长度无法提前确定 - 用
continuousSum变量跟踪连续空值对应的array1数值之和 - 遍历过程中:
- 遇到空值就累加对应array1的数值
- 遇到非空值时,先把之前的累加结果(如果有)加入列表,再加入当前array1的值,然后重置累加器
- 遍历结束后,检查是否还有未处理的累加值(比如数组末尾是连续空值的情况),加入列表
- 最后将列表转为数组并按要求格式输出
内容的提问来源于stack exchange,提问作者Meenu Sai
相关产品推荐
相关产品推荐

