首先我要对Java刚起步,我在python方面有相当的经验,但是Java对我来说还很新。
我的问题是我创建了一种方法来确保4个随机数彼此唯一,我只是通过使用while循环比较每种可能的组合来做到这一点。
我可以看到我的代码有效
public static void EqualValues(int num1, int num2, int num3, int num4) {
Random ran = new Random();
while(num1 == num2 || num1 == num3 || num1 == num4) {
num1 = ran.nextInt(9);
num1 += 1;
}
while(num2 == num1 || num2 == num3 || num2 == num4) {
num2 = ran.nextInt(9);
num2 += 1;
}
while(num3 == num1 || num3 == num2 || num3 == num4) {
num3 = ran.nextInt(9);
num3 += 1;
}
while (num4 == num1 || num4 == num2 || num4 == num3) {
num4 = ran.nextInt(9);
num4 += 1;
}
System.out.println(num1);
System.out.println(num2);
System.out.println(num3);
System.out.println(num4);
System.out.println(".........");
}
哪个将输出4个唯一数字,即: 2 6 8 4
但是,当我在主要方法中执行相同操作时:
public static void main(String[] args) {
Random ran = new Random();
int num1 = ran.nextInt(9);
int num2 = ran.nextInt(9);
int num3 = ran.nextInt(9);
int num4 = ran.nextInt(9);
num1 += 1;
num2 += 1;
num3 += 1;
num4 += 1;
EqualValues(num1, num2, num3, num4);
System.out.println(num1);
System.out.println(num2);
System.out.println(num3);
System.out.println(num4);
}
在检查之前,我得到的似乎是四个原始数字,即: 2 6 4 4
如果有人可以指出我错了。我希望我已经描述了我的问题,所以它很容易理解。
答案 0 :(得分:0)
将发生以下情况:当将变量传递给EqualValues
(为了遵循约定,应将其重命名为equalValues
)时,它实际上会收到它们的“副本”,并且无法修改。有两种解决方法:
1-您可能以数组形式返回修改后的值。
2-您不传递任何参数,而是将变量声明为静态变量,然后让该方法直接访问它们。
但是,我将总共提出另一种方法:将Set
对象传递给您的方法。这样,该方法将仅修改Set
的内容,并且还可以为您处理重复(因为Set
仅允许唯一值),因此您的代码会更干净。
示例:
private static final Random RNG = new Random();
private static void fillWithRandoms(Set<Integer> set) {
while(set.size() < 4) {
int rando = RNG.nextInt(9) + 1;
set.add(rando);
}
}
public static void main(String[] args) {
Set<Integer> set = new HashSet<Integer>();
fillWithRandoms(set);
System.out.println(set);
}