如何使while循环循环java

时间:2019-01-20 21:15:41

标签: java circular-list

这是DuckDuckGoose的问题。最后一个while循环不是循环列表。如何使它变成圆形,以便可以将其删除,然后再移至下一步,然后移至列表的其他部分,移至列表中的下一个随机数。我必须使用没有索引的迭代器类。因为iterator.hasNext()仅上升到列表的末尾,而不是循环的。如何使while循环使列表循环并最终获得一名获胜者?

19个名字

http://collabedit.com/q248e

public class DuckDuckGoose {

    public static void main(String[] args) {

        LinkedList<String> linkedlist = new LinkedList<String>();
        // add try catch to add list
        try {
            FileReader fr = new FileReader("C:\\Users\\src\\players.txt");
            Scanner inFile = new Scanner(fr);

            while (inFile.hasNextLine()) {
                linkedlist.add(inFile.nextLine());
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        Iterator<String> iterator = linkedlist.iterator();
        while (iterator.hasNext()) {
            iterator.next();
            // random number Goose landed method
            if (getRandomBoolean()) {
                iterator.remove();
            }
        }

        System.out.println(linkedlist);
    }

    public static boolean getRandomBoolean() {
        return Math.random() < .80;
    }

}

2 个答案:

答案 0 :(得分:0)

只需在while循环的顶部添加一个while循环:

while(linkedlist.size() > 1){
    iterator = linkedlist.iterator();
    while (iterator.hasNext()) {
        iterator.next();
        // random number Goose landed method
        if (getRandomBoolean()) {
            iterator.remove();
        }
        if(linkedlist.size() == 1) break;
    }    
}

现在请注意,我在原始循环中添加了一个break语句。这是为了确保我们始终在您的列表包含1个玩家时停止播放,而不是在列表为空时停止播放。

为说明这一点,假设我们没有那个break语句,而您是由两个玩家player1player2开始while循环的。
getRandomBoolean()返回true,player1被删除
getRandomBoolean()再次返回true,player2被删除。
两个while循环都停止了,但是您的列表现在为空。

答案 1 :(得分:0)

public static void main(String... args) throws IOException {
    List<String> players = Files.readAllLines(Paths.get("c:/Users/src/players.txt"));
    String winner = getWinner(players);
    System.out.println("winner is " + winner);
}

public static String getWinner(List<String> players) {
    players = new ArrayList<>(players);
    Iterator<String> it = players.iterator();
    Random random = new Random();

    while (players.size() > 1) {
        (it = it.hasNext() ? it : players.iterator()).next();

        if (random.nextBoolean())
            it.remove();
    }

    return players.iterator().next();
}