说我想调用一个内置函数(这意味着我不能更改它):
foo(int x, int y)
我希望x和y的参数是随机的,但应该是相同的随机数。我知道我可以做到
double rand = Math.random();
foo(rand, rand);
但是,有什么方法可以在一行中执行此操作,而无需声明单独的变量?如
foo(Math.random(), Math.random());
但要使它们相同。只是好奇是否有一个简单的方法来执行此操作,我不知道这样做会避免添加多余的行。也许我可以输入第二个参数,该参数基本上告诉它“使其与第一个参数相同”?任何帮助将不胜感激。
答案 0 :(得分:7)
是的,因此可以通过创建另一个带有1个参数并调用原始方法的方法来轻松完成此操作。这样可以确保在调用此方法时该值始终相同。如果您不想公开使用原始的foo(int,int),请不要公开它,并将其隐藏为私有或私有包。
foo(int value) {
foo(value, value);
}
foo(Math.random());
答案 1 :(得分:5)
定义lambda或方法
Function<Integer, Integer> fnc = v -> foo(v,v);
fnc.apply((int)(Math.random()*10));
或
public static int foo(int x) {
return foo(x, x);
}
public int static foo(int x, int y) {
return x + y;
}
答案 2 :(得分:2)
不。每次调用random()
方法时,都会生成一个介于0.0和1.0之间的新数字。甚至使用Random
和ThreadLocalRandom
类的替代方法,其各自方法的行为也相同。
您有两个选择:
Math.random()
的结果,并将其值通过x
和y
传递,就像您在帖子中提到的那样。foo(int x)
现在,您可以传递所需的值。但是,如果要使用具有两个参数的函数,则可以这样调用方法:
foo(int x) {
foo(x, x);
}