Minimum von beliebig vielen double Werten

Hab hier eine Funktion, die das Minimim von beliebig vielen double Werten bestimmt.

Bin aber nich ganz zufrieden mit der Funktion:
Code:
    private static double min(double... args) {        
        if(!args.equals(null)) {
            double a = args[0];
            
            for(int i = 1; i<args.length; i++) {
                if(a > args[i]) {
                   a = args[i];
                }
            }
            return a;
        }
        return 0;
    }

Dieses return 0 stört mich, wie kann ich valides Java schreiben und dieses null umgehen?
 
Hi,
Java:
private static double min(double... args) {        
    double a = args[0];
    if(!args.equals(null)) {
        for(int i = 1; i<args.length; i++) {
            if(a > args[i]) {
                a = args[i];
            }
        }
    }
    return a;
}
sowas in der Art?
 
Hallo,

wenns nicht unbedingt schnell und speicherschonend sein muss:
Java:
System.out.println(Collections.min(Arrays.asList(1.0,2.0,3.0,0.3)));

Ansonsten:
Java:
package com.dacos.training;

public class MinValue {
    public static void main(String[] args) {
        double val = min(1.0, 2.0, 3.0, 0.3);
        System.out.println(val);
    }
    private static double min(double... values) {
        double min = Double.MAX_VALUE;
        for (double d : values) {
            min = Math.min(min, d);
        }
        return min;
    }
}

Gruß Tom
 
Ja, wenn ich dann aber min() aufrufe, also ohne Parameter krieg ich eine exception. Und das will ich nicht.
min() ohne Parameter aufzurufen macht doch auch keinen Sinn. Von was soll die Funktion denn das Minimum rausfinden wenn keine Werte übergeben wurden.


@Matze:
Java:
private static double min(double... args) {        
    double a = args[0];
    if(!args.equals(null)) {
..
}
}
Für was diese Prüfung: if(!args.equals(null))
Wenns null ist dann kommst du eh nicht bis dort hin da es schon eine Excetion bei der ersten Anweisung geben würde: double a = args[0];

Oder?

Gruss
jeipack
 
In solchen Fällen schmeißt man eine IllegalArgumentException und zwar sofort nach Eintritt in die Methode.

Java:
if (null == args || 0 == args.length) {
  throw new IllegalArgumentException("You have to provide at least 1 argument!");
}

Sowas ist immer wichtig, wenn man irgendwelche Annahmen über den Zustand von Eingabeparametern trifft. Nach dieser Anweisung kannst du dir sicher sein, dass args nicht null ist und mindestens ein Element enthält.

Thomas' Idee finde ich auch ausnahmsweise mal suboptimal. Für min() liefert das ding nämlich Double.MAX_VALUE zurück. Vermutlich nicht im Sinne des Erfinders. ;)

REINHAUN!
 
Hallo,

Thomas' Idee finde ich auch ausnahmsweise mal suboptimal. Für min() liefert das ding nämlich Double.MAX_VALUE zurück. Vermutlich nicht im Sinne des Erfinders. ;)
Natürlich ist das ein Fehler / Bug / Missing-Feature, das in einer produktiv Variante dieser Methode dazugehört.

Das führt mich aber zu der Frage: Muss Beispielcode immer Feature-complete sein? Es war doch nur gefragt wie man das Minimum einer Anzahl von doubles findet. Der Code demonstriert genau das in O(n). Das kein Wert übergeben wird ist eine Ausnahme / ein Sonderfall auf den ich im Beispiel nicht eingeganen bin.
Beachtet man in den Beispielen alle Sonderfälle (kann ja auch Double.NAN reinkommen), so wird der Beispielcode zwar vollständig aber auch etwas komplizierter.

Ich denke die Granularität eines Beispiels hängt von der Frage ab, und wenn man dann nach einer Methode fragt irgendwas algorithmisch zu bestimmen reicht IMHO genau gerade so viel Code aus um genau das zu zeigen.

Gruß Tom
 
Zurück