return Problem

SUPERTJB

Neues Mitglied
Guten Abend, ich bin ein absoluter Java Anfänger und soll für die Schule ein Programm schreiben, welches mir sagt ob ein Wort in einer Zeichenkette mehrmals vorkommt oder nicht. Mein Programm gibt jedoch immer das unterste return wieder, was ich nicht verstehe, da ich dachte, dass die Operation abgebrochen wird, sobald mein vorheriges return erreicht wird. Kann mir jemand erklären warum mein Programm falsch ist?


Java:
public class enthalten {

  static String text = "hallo mein schatz hallo schatz";

  static String[] wörter = text.split(" ");

 

  public static void main(String[] args) {

//    for (int pos=0; pos>wörter.length ;pos++) {

    int pos = 0;

      enthaelt(pos);

//    } // end of for

    System.out.println(enthaelt(pos));

  } // end of main

 

    public static boolean enthaelt(int pos) {  

    for (int i=1; i>wörter.length ;i++) {

      if (!wörter[pos].equals(wörter[i])) {

       

      } else {

        return true;

       

      } // end of if-else

     } // end of for

    return false;

    }

  }
 
Du gehst alle Wörter des Arrays durch. Und vergleichst mit einem Wort aus dem Array, Damit wird mindestens einmal das Wort gleich sein (weil i = pos und damit vergleichst Du einen String mit sich selbst.

==> Es wird immer true ausgegeben. Ein Element in dem Array ist halt immer im Array.
 
In solchen Situationen lohnt es sich mit dem Debugger auseinander zu setzen. Solltest du (noch) keine IDE benutzen, dann reichen dafür auch einfache System.out.println(). Hier ein Beispiel wie ich das meine:

Java:
 public static boolean enthaelt(int pos) {
    // Sysout: Betrete die Methode enthaelt mit pos = ...
    for (int i=1; i>wörter.length ;i++) {
        // Sysout: Betrete for-Schleife mit i=
        // Sysaout: wörter[pos] und wörter[i]
        if (wörter[pos].equals(wörter[i])) {
            return true; // Hier kürzere Schreibweise, wenn man den true Fall haben will, sollte man ihn auch wählen.
        }
    } // end of for
    return false;
 }

Zweck ist es zu verstehen, wie der und ob überhaupt der Code durchlaufen wird und wie sich die Variablen ändern.

Code:
for (int i=1; i>wörter.length ;i++) {

i > wörter.length ist in deinem Beispiel immer false, wenn i = 1 und wörter.lentght 5 ist, da 1 < 5.
 

Neue Themen


Zurück
Oben