Line-Fehler

Dieses Thema Line-Fehler im Forum "Allgemeine Java-Themen" wurde erstellt von Masterofdarkniss, 1. Dez. 2016.

Thema: Line-Fehler Moin an alle, mein Problem ist, dass ich nicht verstehe warum die zweite line nicht ins if sondern ins else reingeht...

  1. Moin an alle,
    mein Problem ist,
    dass ich nicht verstehe warum die zweite line nicht ins if sondern ins else reingeht während die erste line in ins if geht. Wäre toll, wenn es mir jemand erklären könnte. Auf Google hab ich nur Sachen mit StringBuffur oder Reader gefunden.

    Code (Java):

    public void aufgabe(int y) {
            String line = "";
           
           
            for (int x = 0; x < y; x++) {
                line = s.nextLine();  
               
               
                System.out.println(line + " Vor dem If");  
                if(line.startsWith(">")){
                    System.out.println(line + " Nach dem If");          
                }else{
                    System.out.println(line + " Im else");
                    do{
                        line = s.nextLine();
                        x++;
                        System.out.println(x);  
                    }while(line.isEmpty() == false);
                    System.out.println("geschaft");  
                }
            }
        }
    Ich hab den Rest des Programms als PNG angeheftet.
    Vielen dank im voraus.

    m.f.G.: Masterofdarkniss
    PS: Ja, ich hab die Fehlermeldung in der Console gesehen ^^.
     

    Anhänge:

    Zuletzt bearbeitet: 1. Dez. 2016
  2. Vielleicht hilft dir das Grundlagen Training weiter --> *Klick*
  3. Joose
    Joose Mitarbeiter
    Code bitte in Code-Tags geben, danke :)
    [code=java] ... dein code ... [/code]

    Zu deinem Problem:
    Lass dir doch mal den Inhalt von "anfang" vor dem if ausgeben. Damit du siehst was auf dem String draufsteht, möglicherweise nicht das was du erwartest ;)
    Oder falls du eine IDE verwendest, kannst du den Debugger verwenden und dir den Inhalt zur Laufzeit anschauen.
     
    Zuletzt bearbeitet: 1. Dez. 2016
    VfL_Freak und Masterofdarkniss gefällt das.
  4. Da kann ich Joose nur zustimmen.
    Lass dir mal den Wert von anfang ausgeben.

    BTW:
    Anstatt dir jedesmal den Substring zu holen, könntest du auch String#startsWith(String str) verwenden.
    Die Methode gibt true zurück, falls ein String mit der Sequenz (als Parameter in dem Klammern) beginnt.
    Macht den Code mMn übersichtlicher und (für dich/für andere) leichter zu verstehen.
     
    Masterofdarkniss gefällt das.
  5. Danke für die schnellen Antworten,
    ich hab den Code oben angepasst, die Console zeigt mir an

    Total number of lines : 7
    > Starte File Vor dem If
    > Starte File Im else
    1
    2
    3
    4
    5
    geschaft
    > END File Vor dem If
    > END File Nach dem If

    Ich hoffe, ich hab den Befehl richtig implementiert "
    Code (Java):
    String#startsWith(String str)
    "

    Das Programm springt von if in else, obwohl die klammern (laut Eclips) richtig gesetzt wurden.
     
  6. Joose
    Joose Mitarbeiter
    Funktioniert es denn? Dann ist es richtig ;)
    Weißt du schon was dein Fehler vorher war? Um auf das erste Zeichen eines Strings zuzugreifen musst du auf Index 0 zugreifen ;)

    Wenn du nicht weiß was die Methode genau macht dann ist es immer ratsam in die Dokumentation zu schauen.
    http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#startsWith(java.lang.String)
     
    Masterofdarkniss gefällt das.
  7. An einem simplen Beispiel erklärt:
    Code (Java):

    // Du hast einen String den du testen willst
    String testString = "Den String will ich test";

    // Und du hast einen String, der deine Pattern enthält,
    // also auf was du prüfen willst
    String prüfString = "Den";

    if(testString.startsWith(prüfString)
    {
         System.out.println("Der String beginnt mit " + prüfString);
    }

    // Die Methode schaut also ob dein String auf den du die Methode anwendest mit dem Ausdruck startet, der in Klammern als Parameter übergeben wird.
    // Wenn das der Fall ist gibt sie true zurück und deine if-Bedingung wird true.
    //In deinem Fall könnte man also sagen

    if(line.startsWith(">") { .. }

     
    Genaueres kannst du hier nachlesen.

    PS: da war wohl jemand schneller :p
     
    Masterofdarkniss gefällt das.
  8. Nein es funktioniert leider nicht :(, laut der If-aussage müsste er in die if-Anweisung gehen, wenn der Satz mit ">" beginnt ,aber leider geht er trotzdem in die Else Anweisung.
    Es wird das richtige abgefragt und die Bedingung ist erfüllt.

    Code (Java):

        public void aufgabe(int y) {
            String line = "";
            for (int x = 0; x < y; x++) {
                line = s.nextLine();
                System.out.println(line + " Vor dem If");
                if(line.startsWith(">")){
                    System.out.println(line + " Im If");        
                }
                else{
                    System.out.println(line + " Im else");
                    do{
                        line = s.nextLine();
                        x++;
                        System.out.println(x);
                    }while(line.isEmpty() == false);
                    System.out.println("geschaft");
                }
            }
        }
    Der String ist "> Starte File" und ausgegeben wird
    "> Starte File Vor dem If"
    "> Starte File Im else"
    und nicht wie es korrekt wäre "> Starte File Im If"
     
  9. Ok ich weiß nicht warum aber es funktioniert.

    Code (Java):

        public void aufgabe(int y) {
            String line = "";
            String subLine = "";
         
            for (int x = 0; x < y; x++) {
                line = s.nextLine();
                subLine = line.substring(1, 2);
                System.out.println(line + " Vor dem If" );
                if (line.startsWith(">")||subLine.equals(">")) {
                    System.out.println(line + " Im If");
                } else {
                    System.out.println(line + " Im else");
                    do {
                        line = s.nextLine();
                        x++;
                        System.out.println(x);
                    } while (line.isEmpty() == false);
                    System.out.println("geschaft");
                }
            }
        }
    PS: Nein es ist kein Leerzeichen vor dem ">" gewesen aber nagut.
     
  10. Kontrollier noch mal dein File.. irgendwas kann da nicht stimmen
    Hab dein Projekt mal quick'n'dirty nachgebaut mit
    Code (Text):

    > Starte File
    > BEGINE
    ABCD
    > Hallo
    > Hallo

    > END
     
    und

    Code (Java):

    public static void main(String[] args)
    {

            File f = new File("C:\\Users\\Robert\\Desktop\\bla.txt");

            Scanner s = null;
            try {
                s = new Scanner(f);
            } catch (FileNotFoundException ex) {
                System.err.println("Error: " + ex);
            }
           
            String line = "";
            while(s.hasNextLine()) {
                line = s.nextLine();
                System.out.println(line + " Vor dem If");
                if(line.startsWith(">")){
                    System.out.println(line + " Im If");        
                }
                else{
                    System.out.println(line + " Im else");
                }
           }
            System.out.println("geschaft");
        }
    }
     
    Und mein Output ist:

    Code (Text):

    > Starte File Vor dem If
    > Starte File Im If
    > BEGINE Vor dem If
    > BEGINE Im If
    ABCD Vor dem If
    ABCD Im else
    > Hallo Vor dem If
    > Hallo Im If
    > Hallo Vor dem If
    > Hallo Im If
     Vor dem If
     Im else
    > END Vor dem If
    > END Im If
    geschaft
     
    Was richtig sein sollte.

    Hab jetzt dein Else-Block nicht genauso, sollte aber kein Problem sein.

    Und mal eine Frage: was ist dein y? wo kommt das her?
    Liegt da vielleicht der Fehler?
    Wenn du das File einfach nur durchlaufen willst bis es zu Ende ist dann nimm, so wie ich, Scanner#hasNextLine();
     
  11. Kostenloses Java-Grundlagen Training im Wert von 39 €
    Schau dir jetzt hier das Tutorial an und starte richtig durch!