Ответ 1
Math.max
принимает только два аргумента. Если вы хотите максимум три, используйте Math.max(MY_INT1, Math.max(MY_INT2, MY_DOUBLE2))
.
Скажем, у меня следующие три константы:
final static int MY_INT1 = 25;
final static int MY_INT2 = -10;
final static double MY_DOUBLE1 = 15.5;
Я хочу взять три из них и использовать Math.max()
, чтобы найти максимум из трех, но если я передаю более двух значений, это даст мне ошибку. Например:
// this gives me an error
double maxOfNums = Math.max(MY_INT1, MY_INT2, MY_DOUBLE2);
Пожалуйста, дайте мне знать, что я делаю неправильно.
Math.max
принимает только два аргумента. Если вы хотите максимум три, используйте Math.max(MY_INT1, Math.max(MY_INT2, MY_DOUBLE2))
.
Если возможно, используйте NumberUtils в Apache Commons Lang - там много полезных утилит.
NumberUtils.max(int[])
Без использования сторонних библиотек, вызывая один и тот же метод более одного раза или создавая массив, вы можете найти максимум произвольного количества удвоений, например:
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);
}
У меня очень простая идея:
int smallest = Math.min(a, Math.min(b, Math.min(c, d)));
Конечно, если у вас есть 1000 numbers
, он неприменим, но если у вас есть номера 3
или 4
, это легко и быстро.
С уважением, Норберт
Как упоминалось ранее, Math.max() принимает только два аргумента. Он не совсем совместим с вашим текущим синтаксисом, но вы можете попробовать 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;
}
}
Это будет принимать любое количество смешанных числовых аргументов (Integer, Double и Float), но возвращаемое значение - Object, поэтому вам нужно было бы перевести его в Integer, Double или Float.
Это может также вызвать ошибку, поскольку нет такой вещи, как "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
Ссылки Java ™ Как программировать (ранние объекты), десятое издание
Java 8-way. Работает для нескольких параметров:
Stream.of(first, second, third).max(Integer::compareTo).get()
вы можете использовать это:
Collections.max(Arrays.asList(1,2,3,4));
или создать функцию
public static int max(Integer... vals) {
return Collections.max(Arrays.asList(vals));
}