Java访问ArrayList没有for循环

时间:2014-04-08 11:33:23

标签: java for-loop arraylist

我正在尝试制作一个刽子手类型的游戏但是我在编写返回和更新用户试图猜测的单词的方法时遇到了困难。因此,例如,如果猜测的单词是'hello',我希望将其打印为 * ,但如果有人猜到'e',它应该更新为 e ** 。我有点工作,但它遍历两个ArrayLists,这不是我想要的:

public String getVisible() {
    String rtn = null;
    for(Character b: brokenphrases){

        for(Character c:characters){
            if(b == c){
                rtn = rtn + b;

            }
        }

        if(b.toString().equals(" ")){
            rtn = rtn +" ";

        }
        else{

            rtn = rtn + "*";
        }

    }

    return rtn;
}

这个想法是字符的ArrayList包含用户输入的输入,而破字的ArrayList有需要猜测的单词,分解为单个字符,以便他们可以比较两者。现在发生的事情是,当我运行程序时,我得到了我的猜测,例如你好打印为 * 但是因为我猜字母文本变为加倍而不是被替换。因此,如果我输入h,e,l,o,系统会输出h * e * l * l * o *而不是去除星号。我认为这与使用两个for循环有关,但我不确定如何修复它。任何意见,将不胜感激。感谢。

2 个答案:

答案 0 :(得分:1)

您可以简化代码以获得以下内容:

public String getVisible() {
    String rtn = null;

    for(Character b: brokenphrases){
        if(characters.contains(b)){
            rtn = rtn + b;
        } else {
            rtn = rtn + "*";
        }
    }

    return rtn;
}

您迭代目标词(brokenphrases)的所有字符,例如hello。如果字符在characters中,则将字符添加到输出中。如果没有,请添加*

如果您猜到hl,您会得到h*ll*

无需添加空格。

答案 1 :(得分:0)

您确实不需要对字符进行排序,因此您可以使用Set(例如TreeSet)代替ArrayList。然后,您可以将代码更改为以下内容:

public String getVisible() {
    String rtn = null;
    for(Character b: brokenphrases){

        if(characters.contains(b)){
            rtn = rtn + b;
        }

        if(b.toString().equals(" ")){
            rtn = rtn +" ";

        }
        else {

            rtn = rtn + "*";
        }

    }

    return rtn;
}