Java 代码陷入无限重复的 while 循环

标签 java

我有一些代码通过将二维数组 cards 中随机选择的卡片分配到 ArrayList deck 中来洗牌,但是当我运行代码时它得到陷入无限循环。

一开始它工作正常,但似乎随机停止工作,几乎没有更改代码。

cards 是一个 13 x 4 的阵列,每个位置都有一张不同的卡片。

ArrayList<String> deck = new ArrayList<String>();
        for (int i = 0; i < 52; i++)  {
            int v = 0;
            int s = 0;
            Boolean notInDeck = false;
            while (!notInDeck) {
                v = rand.nextInt(13);
                s = rand.nextInt(4);
                if (!deck.contains(cards[v][s])) {
                    notInDeck = true;
                    deck.add(cards[v][s]);
                }
            }
        }

我尝试在不同点添加输出以尝试跟踪发生的事情

ArrayList<String> deck = new ArrayList<String>();
        for (int i = 0; i < 52; i++)  {
            System.out.println("1");
            int v = 0;
            int s = 0;
            Boolean notInDeck = false;
            while (!notInDeck) {
                System.out.println("2");
                v = rand.nextInt(13);
                s = rand.nextInt(4);
                if (!deck.contains(cards[v][s])) {
                    System.out.println("3");
                    notInDeck = true;
                    deck.add(cards[v][s]);
                }
                System.out.println("4");
            }
            System.out.println("5");
        }
        System.out.println("6");

没有错误信息。

第一批遍历的输出是 1 2 3 4 5 1 2 3 4 5,但最终无限重复 2 4 2 4 2 4...

它应该像 1 2 3 4 5 1 2 3 4 5 然后有时 1 2 4 2 3 4 5 当它重复一组随机数时。

这是我的 cards 二维数组代码。

String[][] cards = new String[13][4];

        String suit = " ";
        String value = "";

        for (int i = 0; i < 13; i++)  {
            for (int j = 0; j < 4; j++)  {
                if (j == 0) {
                    suit = "C";
                } else if (j == 1) {
                    suit = "H";
                } else if (j == 2) {
                    suit = "S";
                } else if (j == 3) {
                    suit = "D";
                }
                if (i == 0) {
                    value = "A";
                } else if (i == 10) {
                    value = "J";
                } else if (i == 11) {
                    value = "Q";
                } else if (i == 12) {
                    value = "K";
                } else {
                    value = Integer.toString(i+1);
                }
                cards[i][j] = value;
            }
        }

编辑: 我意识到问题出在这一行

cards[i][j] = value;

应该是

cards[i][j] = value + " " + suit;

最佳答案

你正在让你的生活更加艰难。

在现实生活中,您不会拿到无数张卡片,也不会随机挑选卡片,直到您完成整副 52 张卡片。事实上,您从 52 张牌开始,然后将它们洗牌。在这里做同样的事情

  1. 收集 52 张卡片
  2. 随机播放该集合(例如使用 Collections.shuffle)

虽然这只是线性运算,但您的解决方案是不确定的。

关于Java 代码陷入无限重复的 while 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57208891/

相关文章:

java - 如何在 mac os mavericks 上安装 Netbeans 7.4(已经安装了 jdk 7 update 45)?

java - 尝试访问 LauncherProvider

java - 使用 Java 和 Jackson 将 Json 序列化为没有模式的通用结构

java - 在用Java读取和重写XML时,是否有系统的方法来保存处理指令?

java - ListIterator last hasNext() 有点不明白

java - 等待主线程直到 ExecutorService 的所有线程池任务完成?

java - 安装 SDK 25 时,无法找到哈希字符串 'android-25' 的目标不会消失

java - 当鼠标光标位于 JTable 的单元格中时显示弹出菜单

java - 什么设计模式应该通过 ActionListener 影响特定对象

java - MySQL 的PreparedStatement 空指针异常