web-dev-qa-db-fra.com

Trouver le maximum de 3 nombres dans Java avec différents types de données

Disons que j'ai les trois constantes suivantes:

final static int MY_INT1 = 25;
final static int MY_INT2 = -10;
final static double MY_DOUBLE1 = 15.5;

Je veux prendre les trois et utiliser Math.max() pour trouver le maximum des trois mais si je passe plus de deux valeurs, cela me donne une erreur. Par exemple:

// this gives me an error
double maxOfNums = Math.max(MY_INT1, MY_INT2, MY_DOUBLE2);

Veuillez me faire savoir ce que je fais mal.

33
Drew Bartlett

Math.max Ne prend que deux arguments. Si vous voulez un maximum de trois, utilisez Math.max(MY_INT1, Math.max(MY_INT2, MY_DOUBLE2)).

77
Jeremiah Willcock

Si possible, utilisez NumberUtils dans Apache Commons Lang - beaucoup de grands utilitaires là-bas.

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

NumberUtils.max(int[])
14
eugene

vous pouvez utiliser ceci:

 Collections.max(Arrays.asList(1,2,3,4));

ou créer une fonction

public static int max(Integer... vals) {
    return Collections.max(Arrays.asList(vals)); 
}
9
shifu

Sans utiliser de bibliothèques tierces, appeler la même méthode plusieurs fois ou créer un tableau, vous pouvez trouver le maximum d'un nombre arbitraire de doubles comme ça

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;
}

Dans votre exemple, max pourrait être utilisé comme ceci

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);
}
8
Christopher Bean

Math.max ne prend que deux arguments, ni plus ni moins.

Une autre solution différente aux réponses déjà publiées consisterait à utiliser DoubleStream.of :

double max = DoubleStream.of(firstValue, secondValue, thirdValue)
                         .max()
                         .getAsDouble();
7
Aomine

Java 8 voies. Fonctionne pour plusieurs paramètres:

Stream.of(first, second, third).max(Integer::compareTo).get()
4
Den Roman

J'ai une idée très simple:

 int smallest = Math.min(a, Math.min(b, Math.min(c, d)));

Bien sûr, si vous avez 1000 numbers, c'est inutilisable, mais si vous avez 3 ou 4 les chiffres, c'est simple et rapide.

Cordialement, Norbert

3
user5430588

Comme mentionné précédemment, Math.max () ne prend que deux arguments. Ce n'est pas exactement compatible avec votre syntaxe actuelle, mais vous pouvez essayer Collections.max ().

Si vous n'aimez pas cela, vous pouvez toujours créer votre propre méthode pour cela ...

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;
    }
}

Cela prendra n'importe quel nombre d'arguments numériques mixtes (Integer, Double et Float) mais la valeur de retour est un Object, vous devrez donc le convertir en Integer, Double ou Float.

Il peut également générer une erreur car il n'existe pas de "MY_DOUBLE2".

1
Samuel Willems
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));
1
kirshiyin

si vous voulez faire un simple, ce sera comme ça

// 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

et la sortie sera quelque chose comme ça

Enter three floating-point values separated by spaces: 9.35 2.74 5.1
Maximum is: 9.35

Références Java ™ How To Program (Early Objects), Tenth Edition

0
Basheer AL-MOMANI