我是Comp Sci大學的第一年,在課堂上我們有一個項目,我們爲遊戲製作了一個名爲「百吉餅」的算法。我們要做一個隨機的3位數字,但沒有一個數字可以是相同的數字。所以像「100,220,343和522」這樣的數字將是非法的,因爲它們包含具有相同數字的數字。修復無限循環?
我決定這將是最好的,分別生成每一個數字,比較每個數字和改變,如果需要的話,並添加每個數字爲一個字符串。這裏是我的代碼:
Scanner input = new Scanner(System.in);
// Generate a random 3 digit number between 102 and 987. The bounds are 102 to 987 because each
// digit in the number must be different. The generated number will be called SecretNum and be
// stored as a String.
// The First digit is generated between 1 and 9 while the second and third digit are generated
// between 0 and 9.
String SecretNum = "";
int firstDigit = (int)(Math.random() * 9 + 1);
int secondDigit = (int)(Math.random() * 10);
int thirdDigit = (int)(Math.random() * 10);
// Now the program checks to see if any of the digits share the same value and if one digit shares
// the same value then the number is generated repeatedly until the value is different
// Digit tests are used to determine whether or not any of the digits share the same value.
boolean firstDigitTest = (firstDigit == secondDigit) || (firstDigit == thirdDigit);
boolean secondDigitTest = (secondDigit == firstDigit) || (secondDigit == thirdDigit);
boolean thirdDigitTest = (thirdDigit == firstDigit) || (thirdDigit == secondDigit);
if (firstDigitTest){
do{
firstDigit = (int)(Math.random() * 9 + 1);
}while (firstDigitTest);
} else if (secondDigitTest){
do{
secondDigit = (int)(Math.random() * 10);
}while(secondDigitTest);
} else if (thirdDigitTest){
do{
thirdDigit = (int)(Math.random() * 10);
}while(thirdDigitTest);
}// end if statements
// Now the program will place each digit into their respective places
SecretNum = firstDigit + "" + secondDigit + "" + thirdDigit;
System.out.println(SecretNum);
(忽略掃描儀現在,這是不必要的這一部分,但後來我需要它)
不幸的是,當我測試的數字,看是否有任何相同的數字,我有時會陷入無限循環。棘手的部分是,它有時會像無限循環一樣運行,但在終止程序之前生成數字。所以有時如果它處於一個無限循環中,我不確定它是真的處於一個無限循環還是我不耐煩,但是我確定這是一個無限循環問題,因爲我等了大約10分鐘,程序仍在運行。
我真的不知道它爲什麼會變成一個無限循環,因爲如果它發生了一個數字匹配另一個數字,那麼數字應該連續生成,直到它是一個不同的數字,所以我不明白它是如何變成一個無限的循環。這是我需要幫助的地方。
(哦,字符串如何我做的不是如何,我會繼續使用它。一旦我得到這個循環固定我會改變它,這樣的數字是附加到字符串。)
爲什麼有人低估了這個正確的答案? – 2013-03-09 20:27:30
@DonRoby:這個問題的另一個回答者在我的答案被低估的同時丟失了1個重點,所以我認爲他是一個低估了它的人。你可以看到他/她的答案,看看他認爲答案是正確的,因此他爲什麼低估了我的答案。 **更新:**現在他刪除了他/她的回答,並且沒有取消我的回覆,所以我想現在每個人都同意了。 :-) – ruakh 2013-03-09 20:29:04
大聲笑,有趣的社區。無論如何,謝謝你的答案;它工作完美!一旦我閱讀你發佈的內容,我感覺非常愚蠢,但我又是一名新生。哈哈 – 2013-03-09 20:39:47