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

Java编程:如何检测ArrayList中是否已存在ask方法传入的用户提问

代码修改方案

你当前的问题在于ask方法没有做重复问题校验,直接就把新问题加入列表并返回回复了,下面给出两种实现方案:

方案1:使用ArrayList内置contains()方法(推荐,代码简洁)

直接调用ArrayList自带的包含判断方法,不需要自己写循环逻辑,修改后的Magic8Ball类的ask方法如下:

public String ask( String question ) {
    // 先判断问题是否已经存在
    if(userQuestions.contains(question)){
        return "You already asked that question.";
    }
    // 新问题先加入列表
    userQuestions.add(question);
    // 再返回随机回复
    return possibleResponses.get(num.nextInt(possibleResponses.size()));
}

注:这里把nextInt(3)改成了nextInt(possibleResponses.size()),后续你新增回复选项时不需要修改这个参数,兼容性更好。


方案2:手动实现循环遍历对比(匹配你原本的实现思路)

如果你需要自己写循环逻辑来完成判断,对应实现如下:

public String ask( String question ) {
    boolean isExisted = false;
    // 遍历所有已存储的问题做对比
    for(String existedQuestion : userQuestions){
        // 字符串内容对比必须用equals,不能用==
        if(existedQuestion.equals(question)){
            isExisted = true;
            break;
        }
    }
    if(isExisted){
        return "You already asked that question.";
    }
    userQuestions.add(question);
    return possibleResponses.get(num.nextInt(possibleResponses.size()));
}

你之前循环对比失败大概率是两个原因:要么是先把问题加入列表再做判断,导致每个问题都会判定为已存在;要么是用==而不是equals对比字符串内容,==对比的是字符串对象的内存地址,不是内容。


测试类代码不需要做任何修改,直接运行即可实现需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 04:24:02