说我有以下三个常量:
final static int MY_INT1 = 25;
final static int MY_INT2 = -10;
final static double MY_DOUBLE1 = 15.5;
Run Code Online (Sandbox Code Playgroud)
我想把它们中的三个Math.max()用来找到三个中的最大值,但如果我传入了两个以上的值,那么它会给我一个错误.例如:
// this gives me an error
double maxOfNums = Math.max(MY_INT1, MY_INT2, MY_DOUBLE2);
Run Code Online (Sandbox Code Playgroud)
请让我知道我做错了什么.
Jer*_*ock 78
Math.max只需要两个参数.如果您想要最多三个,请使用Math.max(MY_INT1, Math.max(MY_INT2, MY_DOUBLE2)).
eug*_*ene 15
如果可能的话,在Apache Commons Lang中使用NumberUtils - 那里有很多很棒的工具.
NumberUtils.max(int[])
Run Code Online (Sandbox Code Playgroud)
shi*_*ifu 10
你可以用这个:
Collections.max(Arrays.asList(1,2,3,4));
Run Code Online (Sandbox Code Playgroud)
或创建一个功能
public static int max(Integer... vals) {
return Collections.max(Arrays.asList(vals));
}
Run Code Online (Sandbox Code Playgroud)
Math.max 只需要两个参数,不多也不少.
已发布答案的另一个不同解决方案是使用DoubleStream.of:
double max = DoubleStream.of(firstValue, secondValue, thirdValue)
.max()
.getAsDouble();
Run Code Online (Sandbox Code Playgroud)
小智 8
不使用第三方库,多次调用相同的方法或创建数组,你可以找到最大的任意数量的双精度数,如此
public static double max(double... n) {
int i = 0;
double max = n[i];
while (++i < n.length)
if (n[i] > max)
max = n[i];
return max;
}
Run Code Online (Sandbox Code Playgroud)
在您的示例中,max可以像这样使用
final static int MY_INT1 = 25;
final static int MY_INT2 = -10;
final static double MY_DOUBLE1 = 15.5;
public static void main(String[] args) {
double maxOfNums = max(MY_INT1, MY_INT2, MY_DOUBLE1);
}
Run Code Online (Sandbox Code Playgroud)
小智 5
我有一个非常简单的想法:
int smallest = Math.min(a, Math.min(b, Math.min(c, d)));
Run Code Online (Sandbox Code Playgroud)
当然,如果您有1000 numbers,它就无法使用,但是如果您有3或4数字,则它既简单又快速。
问候, 诺伯特
Java 8方式。适用于多个参数:
Stream.of(first, second, third).max(Integer::compareTo).get()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
95576 次 |
| 最近记录: |