次の3つの定数があるとします。
_final static int MY_INT1 = 25;
final static int MY_INT2 = -10;
final static double MY_DOUBLE1 = 15.5;
_
それらの3つを取り、Math.max()
を使用して3つの最大値を見つけますが、2つ以上の値を渡すとエラーになります。例えば:
_// this gives me an error
double maxOfNums = Math.max(MY_INT1, MY_INT2, MY_DOUBLE2);
_
私が間違っていることを教えてください。
_Math.max
_は2つの引数のみを取ります。最大3つが必要な場合は、Math.max(MY_INT1, Math.max(MY_INT2, MY_DOUBLE2))
を使用します。
可能であれば、Apache Commons LangのNumberUtilsを使用してください-そこにはたくさんの素晴らしいユーティリティがあります。
NumberUtils.max(int[])
これを使用できます:
Collections.max(Arrays.asList(1,2,3,4));
または関数を作成する
public static int max(Integer... vals) {
return Collections.max(Arrays.asList(vals));
}
サードパーティのライブラリを使用したり、同じメソッドを複数回呼び出したり、配列を作成したりせずに、次のように任意の倍数の最大値を見つけることができます
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;
}
あなたの例では、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);
}
Math.max
は2つの引数のみを取り、それ以上でもそれ以下でもありません。
既に投稿された回答に対する別の異なるソリューションは、 DoubleStream.of
:
double max = DoubleStream.of(firstValue, secondValue, thirdValue)
.max()
.getAsDouble();
Java 8の方法。複数のパラメーターに対応:
Stream.of(first, second, third).max(Integer::compareTo).get()
私は非常にシンプルなアイデアを持っています:
int smallest = Math.min(a, Math.min(b, Math.min(c, d)));
もちろん、1000 numbers
、それは使用できませんが、3
または4
数字、その簡単かつ高速。
よろしく、ノーバート
前述のように、Math.max()は2つの引数のみを取ります。現在の構文と完全に互換性はありませんが、Collections.max()を試すことができます。
気に入らない場合は、いつでも独自のメソッドを作成できます...
public class test {
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 = multiMax(MY_INT1, MY_INT2, MY_DOUBLE1);
}
public static Object multiMax(Object... values) {
Object returnValue = null;
for (Object value : values)
returnValue = (returnValue != null) ? ((((value instanceof Integer) ? (Integer) value
: (value instanceof Double) ? (Double) value
: (Float) value) > ((returnValue instanceof Integer) ? (Integer) returnValue
: (returnValue instanceof Double) ? (Double) returnValue
: (Float) returnValue)) ? value : returnValue)
: value;
return returnValue;
}
}
これは、任意の数の混合数値引数(整数、倍精度浮動小数点数)を取りますが、戻り値はオブジェクトなので、整数、倍精度浮動小数点数、または浮動小数点数にキャストする必要があります。
「MY_DOUBLE2」などは存在しないため、エラーがスローされることもあります。
int first = 3;
int mid = 4;
int last = 6;
//checks for the largest number using the Math.max(a,b) method
//for the second argument (b) you just use the same method to check which //value is greater between the second and the third
int largest = Math.max(first, Math.max(last, mid));
シンプルにしたい場合は、このようになります
// Fig. 6.3: MaximumFinder.Java
// Programmer-declared method maximum with three double parameters.
import Java.util.Scanner;
public class MaximumFinder
{
// obtain three floating-point values and locate the maximum value
public static void main(String[] args)
{
// create Scanner for input from command window
Scanner input = new Scanner(System.in);
// Prompt for and input three floating-point values
System.out.print(
"Enter three floating-point values separated by spaces: ");
double number1 = input.nextDouble(); // read first double
double number2 = input.nextDouble(); // read second double
double number3 = input.nextDouble(); // read third double
// determine the maximum value
double result = maximum(number1, number2, number3);
// display maximum value
System.out.println("Maximum is: " + result);
}
// returns the maximum of its three double parameters
public static double maximum(double x, double y, double z)
{
double maximumValue = x; // assume x is the largest to start
// determine whether y is greater than maximumValue
if (y > maximumValue)
maximumValue = y;
// determine whether z is greater than maximumValue
if (z > maximumValue)
maximumValue = z;
return maximumValue;
}
} // end class MaximumFinder
出力は次のようになります
Enter three floating-point values separated by spaces: 9.35 2.74 5.1
Maximum is: 9.35