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

Java实现ArrayList对象E1-E5格式唯一动态命名的问题咨询

代码存在的核心问题

  • 逻辑结构错误:双层循环设计完全不符合需求,外层循环变量i未参与任何逻辑判断,内层遍历过程中只要当前遍历到的节点名称和E+j不相等,就直接修改node的名称,没有校验E+j是否在整个列表中不存在,导致最终拿到的名称大概率还是重复的。
  • 循环边界错误:遍历编号的上限设为了当前列表的元素个数,而需求要求编号范围是1~5,比如当前列表只有2个元素[E3,E5],你最多只会遍历到j=2,根本不会判断E1是否可用,直接漏掉了可用编号。
  • 判断条件逻辑错误:原有break条件是E+j同时等于当前遍历节点名称和node名称才终止,完全没有匹配「找最小未使用编号」的需求逻辑。
  • 缺少容量校验:没有判断当前列表是否已经达到5个元素的上限,列表满员时仍然执行赋值逻辑。

正确实现参考

// 先判断容量是否已满
int maxSize = 5;
int currentSize = circuit.getNbStartNodes();
if (currentSize >= maxSize) {
    throw new RuntimeException("列表最多容纳5个元素");
}

// 收集所有已使用的编号
Set<Integer> usedNos = new HashSet<>();
for (int i = 0; i < currentSize; i++) {
    StartNode existNode = (StartNode) circuit.getStartNode(i);
    String name = existNode.getName();
    // 提取编号数字部分
    if (name != null && name.startsWith("E")) {
        try {
            int no = Integer.parseInt(name.substring(1));
            usedNos.add(no);
        } catch (NumberFormatException ignored) {
            // 格式异常的名称直接忽略,对应编号当成未占用处理
        }
    }
}

// 从小到大找第一个可用编号
int availableNo = -1;
for (int j = 1; j <= maxSize; j++) {
    if (!usedNos.contains(j)) {
        availableNo = j;
        break;
    }
}

// 给新节点赋值名称
StartNode node = new StartNode();
node.setName("E" + availableNo);
// 后续执行添加node到列表的逻辑即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 06:36:08