我需要帮助编写一个方法,该方法将返回一个没有重复的随机4位数字。我不允许以任何方式使用字符串...
这是我到目前为止所用的线路。涉及,我得到一个错误:运行无法解决
public static int generateSecretNumber() {
Random r = new Random();
int x = r.nextInt(1000);;
x = x + 1000;
return x;
答案 0 :(得分:2)
您可以生成4个独立的数字。
1)产生1到9之间的数字
2)生成0到9之间的数字B,与A
不同3)产生0到9之间的数字C,不同于A和B
4)产生0到9之间的数字D,不同于A,B和C
现在你的号码是ABCD或
1000*A + 100*B + 10*C + D
完整代码:
public static int generateSecretNumber() {
Random ran = new Random();
int a, b, c, d;
a = ran.nextInt(9) + 1; //1-9
do {
b = ran.nextInt(10); //0-9
} while(b==a);
do {
c = ran.nextInt(10); //0-9
} while(c==a || c==b);
do {
d = ran.nextInt(10); //0-9
} while(d==c || d==b || d==a);
return 1000*a + 100*b + 10*c + d;
}
答案 1 :(得分:2)
该行:
int x = + ran.nextInt(1000);
应该阅读
int x = r.nextInt(1000);
另一件事 - 你说你想生成一个没有重复的随机4位数字。 这可能需要一段时间,因为随机数生成器可以多次返回相同的数字,就像翻转硬币时可以连续获得4个头一样。
答案 2 :(得分:1)
生成0到9之间的4个随机数字(nextInt
的参数:10)。跟踪所有4位数字。如果它们中的任何一个相同,则生成另一个随机数字。然后使用数字构建最终数字。
此外,如果您要声明Random
变量r
,请使用r.nextInt(10)
而不是ran.nextInt(10)
。
答案 3 :(得分:1)
对于具有不同数字的4位数随机数,您可以随机播放一个集合。
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 0);
do{
Collections.shuffle(numbers);
} while (0 == numbers.get(0));
System.out.println(numbers.subList(0, 4));
答案 4 :(得分:0)
有很多不同的方法可以做到这一点来获得不同的数字。我建议如下:
public static int generateSecretNumber(int digitLength) {
Random ran = new Random();
int randDigit[digitLength];
int finalNum = 0;
for(int i = 0; i < digitLength; i++){
randDigit[i] = ran.nextInt(10);
int j = 0;
while(j < i){
if(randDigit[j] == randDigit[i]){
randDigit[i] = ran.nextInt(10);
j = 0;
continue;
}
j++;
}
}
for(int i = 0; i < digitLength; i++){
finalNum = finalNum + (randDigit[i] * Math.pow(10, i));
}
return finalNum;
}