我制作了一个生成随机数的程序,但每次都返回0.0
程序:
import java.util.*;
public class RandomNumber {
public static void main(String args[]){
double QuantityColors = 5;
double Mastermind = 0;
Random(QuantityColors, Mastermind);
System.out.println(Mastermind);
}
public static double Random(double QuantityColors, double Mastermind){
Mastermind = Math.random();
Mastermind = Mastermind * QuantityColors;
Mastermind = (int) Mastermind;
return Mastermind ;
}
}
我一直在寻找问题所在,但问题在于回归。
答案 0 :(得分:4)
a)你对"随机"
的结果一无所知b)您无法修改Java参数。见change a functions argument's values?
答案 1 :(得分:3)
首先,您可以使用内置函数生成具有特定上限的下一个整数:Random.nextInt(int)
。例如:
Random rand = new Random();
int masterMind = rand.nextInt(QuantityColors);
而不是自己编写Random
方法。
使用内置设备几乎总是更好,因为它们已经过广泛测试,实现得相当快,等等。
接下来,您似乎假设Java使用 pass-by-reference 。如果您执行以下呼叫:
Random(QuantityColors, Mastermind);
Java将生成MasterMind
值的副本。在方法中设置参数没有用。设置值的唯一方法 - 不是封装在对象中 - 是通过返回值。所以:
MasterMind = Random(QuantityColors, Mastermind);
简而言之:该方法不会返回0
,您只是不做任何有用的事情。
因此,更好的解决方案是放弃Random
方法并使用:
import java.util.*;
public class RandomNumber {
public static void main(String args[]){
int quantityColors = 5;
Random rand = new Random();
int mastermind = rand.nextInt(QuantityColors);
System.out.println(mastermind);
}
}
在随机方法中:
public static double Random(double QuantityColors, double Mastermind){
MasterMind
参数相当无用,因为您立即使用其他值设置它,因此您最好将其删除并使用局部变量。
此外,Java标准规定class
es,interface
s等的名称以大写字母开头;带小写的方法和变量的名称。
最后不清楚为什么使用double
s,因为你计算的所有值都显然是不可或缺的。
答案 2 :(得分:1)
如果你写了
,看起来你的代码会起作用 Mastermind = Random(QuantityColors, Mastermind);
...因为Java是按值传递的,所以调用函数不会改变你传入的变量。