Come creare max metodo che ottiene 4 numeri e restituisce il numero massimo?

Sto cercando di costruire un metodo che potrebbe arrivare a 4 numeri e restituisce il numero massimo di loro.

Ho provato a scrivere questo codice che ottiene 4 numeri, ma questo non funziona:

Di ingresso e di uscita:

double a = Math.max(10, 5, 4, 3);
    System.out.println(a);

public static int max(int a, int b, int c, int d) {
    if (a > b && a > c && a > d)
        return a;
    if (b > a && b > c && b > d)
        return b;
    if (c > a && c > b && c > d)
        return c;
    if (d > b && d > c && d > a)
        return d;
}
  • utilizzare Math.max(Math.max(Math.max(a,b),Math.max(c,d)))
  • è possibile utilizzare un int[] invece di 4 ints anche
  • Cosa succede se due elementi sono entrambi più grandi? Suppongo che max(2, 3, 4, 4) dovrebbero essere 4, ma come sarebbe il codice deve arrivare a quel risultato?
  • Per favore (ti è stato detto prima?) essere più specifico. “Non funziona” non è una descrizione del problema. Devi dirci esattamente che cosa il vostro codice non fa che differisce da quello desiderato. È inoltre necessario indicare anche eventuali messaggi di errore esattamente.
InformationsquelleAutor YoAv | 2014-12-04

 

10 Replies
  1. 14

    Vorrei semplificare questo introducendo una variabile max:

    public static int max(int a, int b, int c, int d) {
    
        int max = a;
    
        if (b > max)
            max = b;
        if (c > max)
            max = c;
        if (d > max)
            max = d;
    
         return max;
    }

    Si potrebbe anche usare Matematica.max, come suggerito da veloce lumaca, ma dal momento che questo sembra essere compiti a casa, io preferirei la soluzione algoritmica.

    Math.max(Math.max(a,b),Math.max(c,d))
    • Patrick, mi aspettavo di essere troppo esperto su Stackoverflow per risolvere gente compiti a casa per loro. 🙂
  2. 4

    Provare Math.max come di seguito:

    return Math.max(Math.max(a, b), Math.max(c, d));
  3. 1

    Si può sempre utilizzare un metodo come questo, che funzionerà come si voleva per qualsiasi numero di interi:

    public static Integer max(Integer... vals) {
        return new TreeSet<>(Arrays.asList(vals)).last();
    }

    Chiamata, per esempio, come:

    System.out.println(max(10, 5, 17, 4, 3));
  4. 0
    if (c > a && c > b && c > d)
        return d;

    qui si sta tornando d invece di c.

    • Aggiungere una descrizione più dettagliata, in modo che altri possono capire
  5. 0

    Un modo in più per farlo…

    public static int max(int a, int b, int c, int d) {
        if (a > b && a > c && a > d)
            return a;
        if (b > c && b > d)
            return b;
        if (c > d)
            return c;
        return d;
    }
  6. 0
    public static Integer max(Integer... values)
    {
         Integer maxValue = null
         for(Integer value : values)
             if(maxValue == null || maxValue < value)
                  maxValue = value;
         return maxValue;
    }
    • Questo briscola altri suggerimenti per (a) la gestione di qualsiasi numero di valori e (b) l’accettazione di una matrice di valori di input troppo, questo lo rende molto più flessibile rispetto a un metodo di accettare esattamente quattro numeri interi.
    • Che cosa circa le prestazioni della memoria? Inutile varargs creazione di array e inutili boxe. Né che l’OP ha chiesto.
  7. 0
    public static int max(int a, int b, int c, int d){
            return (a>b && a>c && a>d? a: b>c && b>d? b: c>d? c:d);
        }
  8. 0
    public static int max(int a, int b, int c, int d) {
    
       int tmp1 = a > b ? a : b;
       int tmp2 = c > d ? c : d;
    
       return tmp1 > tmp2 ? tmp1 : tmp2;
    }
  9. 0
    public static int max(Integer... vals) {
        return Collections.max(Arrays.asList(vals));
    }

Lascia un commento