【问题标题】:Method to put in for loop to restart the loop放入for循环以重启循环的方法
【发布时间】:2015-08-17 04:06:49
【问题描述】:

我是一名编写纸牌游戏的学生,我正在使用 for 循环来模拟抽牌。我的“甲板”是一个带有“卡片”节点的链表。每个“卡片”节点都有一个名为“used”的布尔变量,用于指示卡片是否不再在套牌中。我希望我的循环迭代直到它到达随机卡,如果随机卡已经从卡组中移除,再次运行 for 循环(因为它会生成不同的随机数)。这可能吗?

for(int i = 0; i < randomNumber.nextInt(deck.numberCards); i++){
    etc...
}

附:我意识到一个明显的解决方案是从列表中实际删除节点,但我很好奇是否有办法做到这一点

【问题讨论】:

  • 您需要将代码添加到您的问题中。不清楚您在问我们什么。
  • 知道卡片的索引为什么还要循环呢?
  • @EvanKnowles My "deck" is a linked list with "card" nodes - 没有随机访问。真正的问题是为什么不使用 ArrayList。

标签: java loops linked-list


【解决方案1】:

你可以使用

Card card = null;
do{
    card = deck.get(randomNumber.nextInt(deck.numberCards));
} while(!card.used);

假设deck 列表包含Card 类的实例。

【讨论】:

    【解决方案2】:
    Card picked = null;
    while(picked = null) { /* keep itterating */ }
    

    但请注意,一旦未使用的卡数减少,此循环将运行很长时间,最终将无法终止。

    你最好过滤使用过的卡片,然后从结果列表中选择。

    List<Card> unusedCards =  deck.stream()
        .filter(c -> !c.used).collect(Collectors.toList());
    

    【讨论】:

      猜你喜欢
      • 2012-06-02
      • 2013-07-02
      • 1970-01-01
      • 2020-03-22
      • 2020-10-18
      • 2014-04-19
      • 2020-03-01
      • 1970-01-01
      • 2023-03-18
      相关资源
      最近更新 更多