Kleinsten Index in Array finden

Maxpower123

Mitglied
Hi,

ich soll ein Programm schreiben, das den kleinsten Index in einem Array findet bzw. den Index der zum kleinsten Wert im Array gehört.

Mein Programm sieht so aus:

Java:
public static void main(String[] args) {

        double[] arr = { 5, 3, 8, 2, 4 };     

        System.out.println(minIndex(arr, 0, 4));

    }

    public static int minIndex(double[] arr, int startIndex, int endIndex) {

             
        if (arr[startIndex] < arr[endIndex]) {
            minIndex(arr, startIndex, endIndex-1);
        }
     
        if (arr[startIndex] > arr[endIndex]) {
            minIndex(arr, startIndex+1, endIndex);
        } 
     
        if (startIndex == endIndex) {
            System.out.println(startIndex);
            return startIndex;
         
        }
     
     
        return startIndex;
     
    }


Beim Debuggen habe ich herausgefunden, dass das Programm zwar den richtigen Index findet, aber dann wieder beide Indizes zurückzählt, so dass letztlich immer 0 als Ergebnis berechnet wird.

Die Konsolenausgabe sieht so aus:

3
0

Also in dem If-Statement wird noch die 3 ausgegeben, an die main-Methode wird allerdings 0 zurückgegeben, was ich nicht ganz verstehe.

Kann mir vielleicht jemand sagen, woran das liegt?

Gruß und danke im Voraus
 

Jardcore

Top Contributor
Hey Maxpower123,

du hast einfach vergessen die < und > Varianten auch mit return zu beenden. In deinem Fall wird mehrfach nun parallel die Methode minIndex() aufgerufen. Also return minIndex(...); nicht vergessen.

Hast du den JavaDebuger benutzt?

Beste Grüße,
Jar
 

Meniskusschaden

Top Contributor
Das liegt daran, dass die Rückgabewerte deiner rekursiven Aufrufe nicht stimmen. Du gibst immer startIndex zurück. Für die tiefste Aufrufebene ist das auch korrekt, denn da hast du das Minimum ja gefunden. Aber bei den vorherigen Aufrufebenen ist es falsch, denn startIndex ist auf der jeweiligen Ebene ja noch nicht korrekt. Stattdessen musst du das Ergebnis von minIndex zurückgeben.

Ein zweiter Punkt ist noch nicht ganz sauber. Falls es zwei gleiche Elemente gibt, funktioniert das Programm nicht korrekt.
 

Maxpower123

Mitglied
Danke für die schnellen Antworten.

Das Programm funktioniert jetzt so:

Java:
public static void main(String[] args) {

        double[] arr = { 2, 3, 2, 5 };
      

        System.out.println(minIndex(arr, 0, 3));
      
      

    }

    public static int minIndex(double[] arr, int startIndex, int endIndex) {
      
      
     
              
        if (arr[startIndex] < arr[endIndex]) {
            return minIndex(arr, startIndex, endIndex-1);
        }
      
        if (arr[startIndex] > arr[endIndex]) {
            return minIndex(arr, startIndex+1, endIndex);
        }  
      
        if (startIndex == endIndex) {          
            return startIndex;          
        }       

  if (arr[startIndex] == arr[endIndex]) {
            return -1;
        }
      
        return startIndex;
      
    }
 
Zuletzt bearbeitet:

Jardcore

Top Contributor
Du könntest auch eine Exception werfen, damit die Behandlung auch gleich abgefrühstückt ist und du das nicht weiter oben machen musst, indem du dann auf -1 prüfst.

Weiterhin kannst du als Vorbedingung definieren, dass nur eine Menge, also keine doppelten Elemente, vorhanden sein dürfen. Das kommt dann aber auch auf den Kontext an.
 
K

kneitzel

Gast
Also wieso ist der Wert -1 denn gerechtfertigt? Nur weil zwei Werte gleich sind, heisst es doch nicht, dass es keinen kleinsten Wert gibt. Und selbst wenn die beiden Elemente das kleinste Element gewesen wären (dann gäbe es kein eindeutiges Ergebnis) würde ich die Beschreibung so anpassen, dass ein Index des kleinsten Elements zurück gegeben wird.

Eine Exception und eine -1 Rückgabe sehe ich als nicht wirklich gerechtfertigt an.

Die Lösung könnte also sein, im ersten if statt ein < ein <= zu prüfen. Und was ganz existenziell für alle rekursiven Implementationen ist: Pack bitte die Prüfung des Abbruchbedingung wenn möglich immer an den Anfang! Also bitte das if (startIndex == endIndex) als allererstes ausführen!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Kleinsten Kreis einer Punktmenge bestimmen Java Basics - Anfänger-Themen 4
G Größten und kleinsten Wert im Array ermitteln? Java Basics - Anfänger-Themen 7
B zeichen eines String mit der kleinsten Frequenz zurückgeben Java Basics - Anfänger-Themen 25
D Ermitteln des kleinsten Messwertes von jedem Tag Java Basics - Anfänger-Themen 15
P Rueckgabe des kleinsten Wertes Java Basics - Anfänger-Themen 9
B Hilfe! Kleinsten Wert aus Array finden? Java Basics - Anfänger-Themen 3
G BST Suchbäume kleinsten Wert suchen Java Basics - Anfänger-Themen 3
G Größten u. kleinsten Wert ermitteln Java Basics - Anfänger-Themen 14
M den kleinsten und größten Wert aus einer Datei finden! Java Basics - Anfänger-Themen 4
P Wieso kann ich als Index für einen Array einen Char angeben? Java Basics - Anfänger-Themen 3
melisax Java Array Wert an bestimmtem Index angeben Java Basics - Anfänger-Themen 14
Mugetsu35 ArrayList Update ohne Index Java Basics - Anfänger-Themen 6
Ostkreuz Zweidimensionaler Array Index Java Basics - Anfänger-Themen 2
_so_far_away_ Fehlermeldung "Index 2 out of bounds for length 2" Java Basics - Anfänger-Themen 7
T String Array Fehler beim Index Java Basics - Anfänger-Themen 3
sserio Liste erstellt und ein Problem mit dem Index Java Basics - Anfänger-Themen 8
P9cman Char Index rekursiv finden Java Basics - Anfänger-Themen 4
H Java verkettete Liste, Wert eines Index zurückgeben Java Basics - Anfänger-Themen 1
M Ersten Index von Array bestimmen Java Basics - Anfänger-Themen 14
M Wie kann eine Methode für ein vorhandenes "Array von char" einen Index-Wert zurückliefern? Java Basics - Anfänger-Themen 3
M Wie kann ich den Index i von einer LinkedList überprüfen? Java Basics - Anfänger-Themen 36
T Algorithmus für Index mit min-Wert Java Basics - Anfänger-Themen 2
H For-Schleife bis Index von Eingabe laufen lassen Java Basics - Anfänger-Themen 24
Y Knoten an einem gegebenen Index aus einer Liste entfernen. Java Basics - Anfänger-Themen 6
G Methoden Methode die aus einem Array ein Index ausgibt? Java Basics - Anfänger-Themen 2
Baktash Index 0 out of bounds for length 0 Java Basics - Anfänger-Themen 5
Lena_2611 Vergleich von Array1 Index mit Array2 Wert und erzeugen eines neues Arrays Java Basics - Anfänger-Themen 8
JD_1998 Vektorrechner; User Input -> Index out of bounds Java Basics - Anfänger-Themen 3
H Bei forEach Index des Elements ermitteln Java Basics - Anfänger-Themen 17
G Scanner nutzen und Index auslesen Java Basics - Anfänger-Themen 8
S String index out of range Java Basics - Anfänger-Themen 11
R Zugriff auf den Index eines Arrays, welches ein Objekt ist. Java Basics - Anfänger-Themen 4
J Apache Poi - createCell() Methode akzeptiert keinen Index aus for-schleife als Parameter Java Basics - Anfänger-Themen 4
J Fehler in Programm: Index -1 out of bounds for length 0 Java Basics - Anfänger-Themen 5
M Index of Array erweiteren Java Basics - Anfänger-Themen 24
R String index out of range: -1 beim Datei Parsen Java Basics - Anfänger-Themen 15
L gerader Index im Array Java Basics - Anfänger-Themen 8
A ArrayList - size() nur nach bestimmtem index anzeigen lassen Java Basics - Anfänger-Themen 13
P String index out of range Java Basics - Anfänger-Themen 12
F Arrays Sätze speichern und einzelne Worte mit Index Angabe auslesen Java Basics - Anfänger-Themen 4
M Index out of range Java Basics - Anfänger-Themen 10
I String index out of range Fehlermeldung Java Basics - Anfänger-Themen 4
D " Column Index out of range, 6 > 5." Java Basics - Anfänger-Themen 8
S Index File bauen Java Basics - Anfänger-Themen 5
Z Array-Index einmalig je mit Random füllen Java Basics - Anfänger-Themen 7
Hacer remove at index Java Basics - Anfänger-Themen 31
S kleinster Index der größten Komponente ? Java Basics - Anfänger-Themen 3
K Element in ArrayList löschen ohne Index zu verschieben Java Basics - Anfänger-Themen 2
Z Erste Schritte String index out of range Java Basics - Anfänger-Themen 2
F Freier Index im Stringarray Java Basics - Anfänger-Themen 3
V Attribut aus aus jedem ArrayListen index auf Bildschirm ausgeben Java Basics - Anfänger-Themen 9
B Index out of bound exception. Warum? Java Basics - Anfänger-Themen 3
S string index out of range - es ergibt keinen Sinn Java Basics - Anfänger-Themen 6
E Arrayeintrag nach Index löschen und Array kürzen Java Basics - Anfänger-Themen 3
Ö Frage zu String index out of range: -1 Java Basics - Anfänger-Themen 12
T Index-Abfrage von Pi Java Basics - Anfänger-Themen 5
S Array - index von Benutzer eingegebenen char ausgeben Java Basics - Anfänger-Themen 3
X LinkedList - Index eines Objekts Java Basics - Anfänger-Themen 2
S Substring - String index out of range Java Basics - Anfänger-Themen 11
U buttonarray[this] anstatt buttonarray[index] ? Java Basics - Anfänger-Themen 12
D Annonyme Innere Klasse: Listen mit geradem Index ausgeben Java Basics - Anfänger-Themen 6
MiMa Array mit ungültigen Index ansprechen Java Basics - Anfänger-Themen 2
M Index einer JList ausgeben Java Basics - Anfänger-Themen 4
V Methoden Verkettete Listen Index eines Elementes ausgeben Java Basics - Anfänger-Themen 10
F Fehler bei Array und Index Programmierung Java Basics - Anfänger-Themen 18
T Erste Schritte Java ein Array Feld[index] zurueckgeben? Java Basics - Anfänger-Themen 20
Luk10 Index bei 2 verschachtelten Schleifen Java Basics - Anfänger-Themen 2
C Klassen BubbleSort was passiert mit dem Index ? Java Basics - Anfänger-Themen 2
S String index out of range: 8 at java.lang.String.substring(Unknown Source) Java Basics - Anfänger-Themen 13
E Array bei Index ändern Java Basics - Anfänger-Themen 14
O Index Ermittlung Java Basics - Anfänger-Themen 20
C Felder(Größte Zahl, Index) Java Basics - Anfänger-Themen 6
M kurze frage: Ohne index.of position von string angeben Java Basics - Anfänger-Themen 16
G Collections Liste mit festem Index Java Basics - Anfänger-Themen 16
R ArrayList(int index, Object) funktioniert nicht korrekt? Java Basics - Anfänger-Themen 7
H "Index" eines Button ermitteln Java Basics - Anfänger-Themen 7
K Fehlermeldung: java.lang.IndexOutOfBoundsException: Index: 1, Size: 1 Java Basics - Anfänger-Themen 4
A dynamisches Array - Index Liste Java Basics - Anfänger-Themen 2
X Array Index Out of Bounds Java Basics - Anfänger-Themen 39
S Array bei index halbe umdrehen ohne hilfsfeld Java Basics - Anfänger-Themen 13
H String index out of range: 0 Java Basics - Anfänger-Themen 4
M index.html fehlt Java Basics - Anfänger-Themen 12
I Letzter Index einer Liste Java Basics - Anfänger-Themen 8
StupidAttack Fehler: String index out of range:7 Java Basics - Anfänger-Themen 10
C Datentypen ArrayList.remove(index) hinterlässt leeres Feld Java Basics - Anfänger-Themen 5
A Datentypen Nächsten freien index eines arrays finden Java Basics - Anfänger-Themen 5
S Enum als Index Java Basics - Anfänger-Themen 5
M JList Index selektieren ausschalten. Java Basics - Anfänger-Themen 7
S Sortierte LinkedList nach Variablen durchsuchen und nicht nach INDEX Java Basics - Anfänger-Themen 6
S Fehlermeldung String index out of range?? Java Basics - Anfänger-Themen 3
J arraylist Index des größten, zweit-,dritt-,...-größten Elemtens ausgeben Java Basics - Anfänger-Themen 8
B Array mit Index 1 starten lassen Java Basics - Anfänger-Themen 5
E Höherer Index als Size in ArrayList Java Basics - Anfänger-Themen 9
S Verschiedene Arrays über Index aufrufen Java Basics - Anfänger-Themen 5
M index of bei LinkedList Java Basics - Anfänger-Themen 6
DStrohma Index einer markierten Zeile aus einer JList bekommen? Java Basics - Anfänger-Themen 5
K itemlistener item index herausfinden Java Basics - Anfänger-Themen 4
P Array index per char suche auslesen Java Basics - Anfänger-Themen 3
J Array-Index nur als Integer möglich? Java Basics - Anfänger-Themen 15
H RemoteSocketAddress als Index von einem Array Java Basics - Anfänger-Themen 10

Ähnliche Java Themen

Neue Themen


Oben