Ich muss den Indexwert des Mindestwerts in meiner Arrayliste in Java abrufen. MEINE Arrayliste enthält mehrere Gleitkommazahlen, und ich versuche, mir einen Weg auszudenken, wie ich die Indexnummer der kleinsten Gleitkommazahl erhalten kann, damit ich diese Indexnummer an anderer Stelle in meinem Code verwenden kann. Ich bin ein Anfänger, also bitte hassen Sie mich nicht. Vielen Dank!
Wie finde ich den Mindestwert in einer ArrayList zusammen mit der Indexnummer? (Java)
Marimuthu Madasamy
Sie können verwenden Sammlungen.min und Liste.indexOf:
int minIndex = list.indexOf(Collections.min(list));
Wenn Sie die Liste nur einmal durchlaufen möchten (das obige kann sie zweimal durchlaufen):
public static <T extends Comparable<T>> int findMinIndex(final List<T> xs) {
int minIndex;
if (xs.isEmpty()) {
minIndex = -1;
} else {
final ListIterator<T> itr = xs.listIterator();
T min = itr.next(); // first element as the current minimum
minIndex = itr.previousIndex();
while (itr.hasNext()) {
final T curr = itr.next();
if (curr.compareTo(min) < 0) {
min = curr;
minIndex = itr.previousIndex();
}
}
}
return minIndex;
}
-
Ihrer Lösung fehlt noch etwas! Was ist, wenn die Mindestzahl mehrmals vorhanden ist? Es ist schließlich eine Liste. Also denke ich, dass Sie eine Liste zurückgeben sollten, wenn Indizes für den Mindestwert
– Adel Boutros
10. August 2013 um 19:37 Uhr
-
@AdelBoutros Wenn das OP das möchte, kann diese Lösung als Ausgangspunkt genommen und verbessert werden.
– Marimuthu Madasamy
10. August 2013 um 19:55 Uhr
-
@MarimuthuMadasamy Danke Bruder..du bist der Held..,master maind
– Gowthaman M
12. Januar 2018 um 10:03 Uhr
-
Iteriert das die Liste nicht zweimal?
– Varun Garg
14. Juli 2018 um 13:33 Uhr
Dies sollte es mit eingebauten Funktionen tun.
public static int minIndex (ArrayList<Float> list) {
return list.indexOf (Collections.min(list)); }
Versuche dies:
public int getIndexOfMin(List<Float> data) {
float min = Float.MAX_VALUE;
int index = -1;
for (int i = 0; i < data.size(); i++) {
Float f = data.get(i);
if (Float.compare(f.floatValue(), min) < 0) {
min = f.floatValue();
index = i;
}
}
return index;
}
-
Float.compare(f.floatValue(), min) < 0
kann geändert werdenf < min
. Undmin = f.floatValue()
zumin = f
. Wrapper-Klassen werden implizit in ihre primitiven Äquivalente umgewandelt.– Bernhard Barker
14. April 2013 um 3:44 Uhr
-
@Dukeling, meinst du f<=min?
– BlackJoker
14. April 2013 um 3:49 Uhr
-
Nein, ich meine
f < min
(aus den Dokumenten vonFloat.compare
: “gibt den Wert 0 zurück, wenn f1 numerisch gleich f2 ist; einen Wert kleiner als 0, wenn f1 numerisch kleiner als f2 ist; und einen Wert größer als 0, wenn f1 numerisch größer als f2 ist”). Wenn nicht Sie bedeutenFloat.compare(f.floatValue(), min) <= 0
(welches sein würdef <= min
).– Bernhard Barker
14. April 2013 um 3:53 Uhr
-
Das Delegieren von @Dukeling an Float.compare vermeidet ein fehlerhaftes Verhalten beim Vergleichen von NaN
– BlackJoker
14. April 2013 um 4:06 Uhr
Es gibt eine einfachere Möglichkeit, eine minimale Ganzzahl in der Array-Liste zu finden:
int min = array.get(0);
for (int i : array){
min = min < i ? min : i;
}
public static int minIndex (ArrayList<Float> list) {
return list.indexOf (Collections.min(list));
}
System.out.println("Min = " + list.get(minIndex(list));
Syscall
-
Deklarieren Sie eine Arrayliste mit Floats.
-
Collection.min()
– Finden des kleinsten Elements in der Liste. -
List.indexOf()
– Finden des Index des minimalen Elements.
public class Test {
public static void main(String[] args) {
ArrayList<Float> ary = new ArrayList<Float>();
ary.add((float) 3.0);
ary.add((float) 6);
ary.add((float) 2);
ary.add((float) 1.3);
ary.add((float) 4.2);
int indx = minIndex(a);
System.out.println(indx);
}
public static int minIndex(ArrayList<Float> list) {
return list.indexOf(Collections.min(list));
}
}
hochnäsig
Sie müssen das gesamte Array durchlaufen und zwei Hilfswerte beibehalten:
- Der minimale Wert, den Sie finden (auf dem Weg zum Ende)
- Der Index der Stelle, an der Sie den Mindestwert gefunden haben
Angenommen, Ihr Array wird aufgerufen meinArray. Am Ende dieses Codes minIndex hat den Index mit dem kleinsten Wert.
var min = Number.MAX_VALUE; //the largest number possible in JavaScript
var minIndex = -1;
for (int i=0; i<myArray.length; i++){
if (myArray[i] < min){
min = myArray[i];
minIndex = i;
}
}
Dies setzt das Worst-Case-Szenario voraus: ein völlig zufälliges Array. Es ist ein O(n)-Algorithmus oder Bestellung n Algorithmus, was bedeutet, dass, wenn Sie haben n Elemente in Ihrem Array, dann müssen Sie sich alle ansehen, bevor Sie Ihre Antwort wissen. O(n)-Algorithmen sind die schlechtesten, weil sie viel Zeit brauchen, um das Problem zu lösen.
Wenn Ihr Array sortiert ist oder eine andere spezifische Struktur hat, kann der Algorithmus optimiert werden, um schneller zu sein.
Allerdings sollten Sie sich keine Gedanken über die Optimierung machen, es sei denn, Sie haben ein riesiges Array mit Tausenden von Werten, da der Unterschied zwischen einem O (n) -Algorithmus und einem schnelleren nicht bemerkbar wäre.
Ich denke, die gewählte Lösung ist unvollständig. es fehlt noch etwas! Was ist, wenn die Mindestzahl mehrmals vorhanden ist? Es ist schließlich eine Liste. Ich denke also, es sollte eine Liste zurückgeben, wenn Indizes für den Mindestwert
– Adel Boutros
10. August 2013 um 19:37 Uhr