2 つの数値が特定の範囲に収まらないように乱数を生成するプログラムを作成する必要があります。残念ながら、私は学校でそれを行う必要があり、コンピューターで使用できる唯一の言語は Java です (それ以外の場合は C++ で行います)。私は Java をほとんど知らないのですが、私のプログラムは 20 個ほどの数値を生成した後にスタック オーバーフローを引き起こします。誰かが理由を説明してもらえますか? プログラムはやや醜いですが、急いで準備する必要があります。
import java.io.*;
import java.util.*;
public class RandomNumbers {
public static int GenerateNumber(int previousNumber, int[] numberUsed) {
Random random = new Random();
int number = random.nextInt(39);
if (previousNumber >= 1 && previousNumber <= 9) {
while (number >= 1 && number <= 9)
number = random.nextInt(39) + 1;
} else if (previousNumber >= 10 && previousNumber <= 17) {
while (number >= 10 && previousNumber <= 17)
number = random.nextInt(39) + 1;
} else if (previousNumber >= 18 && previousNumber <= 32) {
while (number >= 18 && previousNumber <= 32)
number = random.nextInt(39) + 1;
} else if (previousNumber >= 33 && previousNumber <= 41) {
while (number >= 32 && number <= 41)
number = random.nextInt(39) + 1;
}
return number;
}
public static void main(String[] args) {
int[] numberUsed;
numberUsed = new int[40];
for (int i = 0; i < 40; ++i) {
numberUsed[i] = 0;
}
int previousNumber = 0;
for (int y = 0; y < 40; ++y) {
int number = 1;
while (numberUsed[ number = GenerateNumber
(previousNumber, numberUsed) ] != 0);
numberUsed[number] = 1;
previousNumber = number;
System.out.println(y);
}
}
}
編集: さて、何らかの理由で、for ループ (カウンターとして y を持つもの) は、while ループを含めると 40 回実行されません。誰かがなぜこれが起こっているのか説明できますか?