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
相关产品推荐
相关产品推荐

