程序在输入代码时冻结

时间:2013-10-21 17:39:56

标签: java

这个程序运行正常,直到我向它介绍以下代码: 对于我的随机数生成器来说,捕获重复项基本上是一个漫长的过程,因为我还没有在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]);

1 个答案:

答案 0 :(得分: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];

...