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

Java Register类contains方法仅首个Ticket ID匹配成功问题求助

问题根因

你的contains方法的for循环中,在if判断分支外多写了一个多余的break;语句:

for (int i = 0;i<100;i++){ 
    if (ticketID.equals(tickets[i].ID())){ 
        b = true; // 匹配成功设为true
        break;
    }
    break; // 这里的break是问题核心:无论if判断是否命中,第一次循环结束都会直接退出循环
}

这就导致循环永远只会校验数组第一个元素,第一个元素匹配就返回true,不匹配直接结束循环返回false,后续元素根本不会被遍历到,所以你校验第二个ID00002时会返回false。

修复方案

1. 修正contains方法

除了删除多余的外层break,还建议把循环上限从固定值100改成numTickets,避免遍历到数组中未赋值的null元素,触发空指针异常,优化后代码如下:

public boolean contains(String ticketID){
    // 只遍历已经添加过的元素,不遍历整个数组的空余位置
    for (int i = 0; i < numTickets; i++){
        if (ticketID.equals(tickets[i].ID())){
            return true; // 匹配到直接返回结果
        }
    }
    return false; // 遍历完所有元素未匹配到返回false
}

2. 顺便优化retrieve方法的潜在问题

你现有retrieve方法同样存在循环上限不合理、未匹配到ID逻辑异常的问题,优化后参考:

public Ticket retrieve(String ticketID){
    for (int i = 0; i < numTickets; i++){
        if (ticketID.equals(tickets[i].ID())){
            return tickets[i];
        }
    }
    // 未匹配到对应ID时返回null,你也可以根据业务需求调整为抛出自定义异常
    return null;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 09:48:03