Ich sollte für eine Aufgabe eine Methode erstellen, die mir, falls das übergebene Feld dasselbe Wort wie das vorherige Feld beinhaltet, true ausgeben soll.
Falls es nicht diesselben Worte sind, soll es mir false ausgeben.
Wenn ich jetzt die Methode per System.out.println() auswerte, komme ich immer auf false, außer die ersten beiden Wörter des Arrays sind die gleichen. Wäre hilfreich, wenn mir einer sagen könnte warum bzw. wo hier mein Fehler liegt.
Noch etwas zur Aufgabe :
Die Struktur muss bleiben.(for Schleife, Boolean, boolean variable oben und return Anw.)
Ich bedanke mich bereits im Vorraus für die Hilfe .
Also mehrere Dinge:
a) boolean enthaeltPaar = true || false ; macht wenig sind. Was willst Du ausdrücken? Das enthaeltPaar wahr oder falsch sein kann? Genau das ist durch den Typ boolean ja schon ausgesagt.
b) Was willst Du genau vergleichen? woerter == woerter[i+1] macht keinerlei Sinn.
b.1) Wenn Du Strings vergleichen willst, so hat dies mit equals zu erfolgen. Ansonsten vergleichst Du nur die Referenz
b.2) Du gehst ja mit einer Schleife durch die Elemente - aber das ganze Array kannst Du nicht vergleichen. Ein Array wird immer ein Array sein und kein einzelnes Element. Da fehlt also noch etwas. Welches Element willst Du da mit dem i+1ten Element vergleichen?
c) In Deiner Schleife setzt Du in jedem Durchlauf enthaeltPaar. Damit überschreibt jeder Lauf das vorherige Ergebnis und am Ende hast Du nur noch das letzte Ergebnis. Das ist doch nicht das, was Du willst. Wenn Du ein Paar gefunden hast: Was soll / kann dann geschehen?
Ach so - Punkt C kannst Du vergessen. Hab beim Schreiben dann vergessen, dass die Schleife ja den Erfolg mit überprüft. Daher wird bei einem gefundenen Paar ja die Schleife verlassen.
publicstaticbooleanenthaeltPaar2(String[] woerter){boolean enthaeltPaar =true;for(int i =0;i < woerter.length -2&& woerter[i]!= woerter[i +1]; i= i +1){int folgendesWort = i +2;
enthaeltPaar = woerter[i+1].equals(woerter[folgendesWort]);}return enthaeltPaar;}
Also so hat es bei mir jetzt funktioniert... ich verstehe aber ehrlich gesagt nicht warum.
Könnte mir einer erklären, warum ich immer wieder bei der vorherigen Methode nicht die aufeinanderfolgenden gleichen Wörter verglichen habe, sondern eine Stelle zu weit vorne?[/I]
Also das war ein Zufall. Es gibt mehrere Fälle, die zu bedenken sind und die bei Dir zu Problemen führen können.
a) Schauen wir einmal, was für Felder Du bearbeitest: Angenommen woerter ist ein String[5]
=> woerter.length = 5
=> Array geht von woerter[0] - woerter[4]
In Deiner Schleife hast Du dann folgende Grenzwerte:
=> i=0 am Anfang
=> i=woerter.length-2-1 = 2
Bei i=0 vergleichst Du woerter[1] mit woerter[2] => woerter[0] wird nicht verwendet!
bei i=2 erwischt Du derzeit auch das letzte Paar: woerter[3] wird mit woerter[4] verglichen.
b) Was soll zurück gegeben werden, wenn kein Vergleich durchgeführt wird? Ich übergebe also ein leeres Array oder ein Array mit einem Wert. Da wird dann bei Dir true zurück gegeben. Das ist in meinen Augen falsch.
c) In der Schleife selbst vergleichst Du Strings noch mit != - da solltest Du auch equals verwenden (und die Rückgabe negieren mit !)
Bitte setze Deinen Code immer in code Tags! Daher hatte ich in Deinem Code die
Code:
[i]
nicht gesehen, denn die hat der Editor als Start eines kursiven textes interpretiert. Also bitte
[ code] und [ /code] verwenden (Ohne das Leerzeichen nach der "[").
Und Dein Vergleich mit dem i statt i+2 war schon richtig, nur eben sollte es nicht mit == sondern mit equals verglichen werden. Also wieder mit i und i+1 vergleichen und die Grenze auf < length-1 bzw. <= length-2 setzen.