[英]Changes made to variables in a method not changing in the main method JAVA
我首先要说我对 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
如果有人能指出我哪里出错了。 我希望我已经描述了我的问题,以便于理解。
会发生以下情况:当您将变量传递给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);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.