Line-Fehler

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.

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

  • test1.PNG
    test1.PNG
    25,3 KB · Aufrufe: 30
  • testMain.PNG
    testMain.PNG
    9,9 KB · Aufrufe: 25
  • TXT.PNG
    TXT.PNG
    2 KB · Aufrufe: 23
  • Compiler.PNG
    Compiler.PNG
    3,9 KB · Aufrufe: 21
Zuletzt bearbeitet:
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:
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.
 
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 "
Java:
String#startsWith(String str)
"

Das Programm springt von if in else, obwohl die klammern (laut Eclips) richtig gesetzt wurden.
 
Ich hoffe, ich hab den Befehl richtig implementiert "
Java:
String#startsWith(String str)
"?
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)
 
An einem simplen Beispiel erklärt:
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 😛
 
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.

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"
 
Ok ich weiß nicht warum aber es funktioniert.

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.
 
Kontrollier noch mal dein File.. irgendwas kann da nicht stimmen
Hab dein Projekt mal quick'n'dirty nachgebaut mit
Code:
> Starte File
> BEGINE
ABCD
> Hallo
> Hallo

> END

und

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:
> 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();
 

Neue Themen


Zurück
Oben