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