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

如何基于源数组创建更短的目标数组?Java代码问题求助

你的代码存在这些核心问题,咱们逐个分析:

1. 数组长度逻辑完全搞反了

你需要存储i个有效姓名,那目标数组nomes的长度应该是i,而不是10-i。虽然当i=5时10-i=5刚好凑对,但这只是巧合——逻辑上你需要的是能容纳i个元素的数组,而不是源数组剩下的空位数量。如果i=3,10-i=7,你会得到一个长度为7的数组,后面4个位置都是null,完全不符合你的目标。

2. 赋值逻辑错误+数组越界风险

你当前的代码只执行了nomes[i] = nomeCompleto[i];,这有两个严重问题:

  • 数组越界:如果nomes长度是10-i,那它的最大索引是(10-i)-1,而i肯定大于这个值(比如i=5,最大索引是4,nomes[5]直接抛出ArrayIndexOutOfBoundsException)。
  • 只复制了一个元素:你没有遍历所有有效姓名的索引(0到i-1),只会给目标数组的某一个位置赋值,其他位置都是null,根本得不到你想要的完整姓名列表。

3. 未处理源数组的终止标记fim

你的源数组用fim作为有效元素的结束信号,但当前代码完全没判断这个。如果外部传入的i值不准确(比如多算了或者少算了),代码就会出错。理想情况下,代码应该能自己识别fim来确定有效元素的数量,而不是依赖外部的i。


修正后的代码示例

情况1:已经确定i是正确的有效姓名数量

String[] nomeCompleto = new String[10];
// 假设这里已经给nomeCompleto赋值了你的源数组内容
// 初始化长度为i的目标数组,刚好容纳所有有效姓名
String[] nomes = new String[i];
// 循环复制每个有效元素
for (int j = 0; j < i; j++) {
    nomes[j] = nomeCompleto[j];
}

System.out.println(Arrays.toString(nomes));
return;

情况2:需要自动识别fim来确定有效元素数量(更健壮)

String[] nomeCompleto = {"Maria Carolina", "Luisa Joana", "Lara Silva", "Catarina Patricio", "Paula Castro", "fim", null, null, null, null};

// 先遍历源数组,找到"fim"或null的位置,统计有效姓名数量
int validCount = 0;
while (validCount < nomeCompleto.length 
       && nomeCompleto[validCount] != null 
       && !"fim".equals(nomeCompleto[validCount])) {
    validCount++;
}

// 初始化目标数组并复制元素
String[] nomes = new String[validCount];
for (int j = 0; j < validCount; j++) {
    nomes[j] = nomeCompleto[j];
}

System.out.println(Arrays.toString(nomes));
return;

这段代码会自动跳过fim及之后的null,精准提取你需要的有效姓名列表。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:39:21