使用不同的数据类型在Java中查找最多3个数字

Dre*_*ett 35 java math max

说我有以下三个常量:

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)).

  • 当涉及n个值时,必须有更好的方法。 (4认同)
  • +1我即将提交相同的答案. (3认同)
  • @mlissner是的,使用一个循环和一个变量`max`,检查每个变量是否大于`max`,如果是这样的话:将`max`设置为该变量.假设您的n值当然在数组中. (3认同)

eug*_*ene 15

如果可能的话,在Apache Commons Lang中使用NumberUtils - 那里有很多很棒的工具.

https://commons.apache.org/proper/commons-lang/javadocs/api-3.1/org/apache/commons/lang3/math/NumberUtils.html#max(INT [])

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)


Ous*_* D. 9

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,它就无法使用,但是如果您有34数字,则它既简单又快速。

问候, 诺伯特

  • 我很确定问题是关于最大数量……而不是最小数量;) (5认同)

Den*_*man 5

Java 8方式。适用于多个参数:

Stream.of(first, second, third).max(Integer::compareTo).get()
Run Code Online (Sandbox Code Playgroud)

  • 不妨使用“DoubleStream”来比较双精度数。 (2认同)