-4

在我向它引入以下代码之前,该程序运行良好: 为我的随机数生成器捕获重复项基本上是很长的路要走,因为我还没有在 Java 上进阶。我听说过 arraylists 和 collections.shuffle 但它们对我来说太先进了。无论如何,当我单击激活此代码的按钮时,为什么我的程序会冻结?

do {
    if (BArray[1] == BArray[0]){
        BArray[1] = 1 + bNumber.nextInt(15);
    }
    if (BArray[2] == BArray[1] || BArray[2] == BArray[0]) {
        BArray[2] = 1 + bNumber.nextInt(15);
    }
    if (BArray[3] == BArray[2] || BArray[3] == BArray[1] || BArray[3] == BArray[0]){
        BArray[3] = 1 + bNumber.nextInt(15);
    } 
    if (BArray[4] == BArray[3] || BArray[4] == BArray[2] || BArray[4] == BArray[1] || BArray [4] == BArray[0])
        BArray[4] = 1 + bNumber.nextInt(15);
} while (BArray[4] != BArray[3] || BArray[4] != BArray[2] || 
         BArray[4] != BArray[1] || BArray[4] != BArray[0] || 
         BArray[3] != BArray[2] || BArray[3] != BArray[1] || 
         BArray[3] != BArray[0] || BArray[2] != BArray[1] || 
         BArray[2] != BArray[0] || BArray[1] != BArray[0]);
4

1 回答 1

1

这是一些异常冗长的代码,但很容易看出为什么循环永远不会终止。很明显,当没有重复的数字时您想停止,但是,只要有任何不同的数字,您当前的实现就会继续进行。实际上,要终止循环,所有数字必须相等

我假设你真正想要的是:

while (BArray[4] == BArray[3] || ... || BArray[1] == BArray[0]);

现在,实现此目的的更好方法是使用更多循环!

bool hasDuplicates = false;

for (int i = 0; i < BArray.length; i++)
    for (int j = i + 1; j < BArray.length; j++)
        hasDuplicates |= BArray[i] == BArray[j];

...
于 2013-10-21T17:54:00.577 回答