Ascii Bild einlesen
-
Hey Leute,
Ich hab die Aufgabe bekommen ein ganz normales Ascii Bild einzulesen und dann die Hoehe und Breite auszugeben. Wenns nicht passt in der Breite dann "Input Dismatch"Irgendwie gehts aber bei mir ned:
import java.util.Scanner; public class Ascii { public static void main(String args[]) { int Hoehe = 0; int Breite = 0; boolean Fehler = false; Scanner eingabe = new Scanner(System.in); String Zeile = ""; while(eingabe.hasNextLine()) { Zeile = eingabe.nextLine(); if(Breite == 0) { Breite = Zeile.length(); } else if (Zeile.length() != Breite) { Fehler = true; } Hoehe++; } if (Fehler == true) System.out.println("INPUT MISMATCH"); else System.out.println(Breite + " " + Hoehe); } }
Das Program hör einfach ned auf das Ascii Bild einzulesen...
Ich bin euch dankbar für jede Antwort, weil schön langsam verlier ich den Verstand...
greetz
-
Überleg mal selber: Wann sollte er den aufhören? Bei einem Fehler? Dann musst das auch im Schleifenkopf überprüfen!
Außerdem: Varaiblnnamen sollte man kleinschreiben.
-
Rhombicosidodecahedron schrieb:
Überleg mal selber: Wann sollte er den aufhören? Bei einem Fehler? Dann musst das auch im Schleifenkopf überprüfen!
Außerdem: Varaiblnnamen sollte man kleinschreiben.
erstmal vielen dank für deine Antwort...
jedoch ,so denke ich, muss die schleife doch aufhören wenn eingabe.hasNextLine() ned stimmt oder? Nur das tuts irgendwie ned...
eingabe.hasNextLine(): liefert false beim Eingabe Ende und das Ende ist doch dort wo nix mehr steht.
Oder hab ich da was falsch verstanden...
greetz
PS.: Thx für den Tip mit den vars
-
Jein, AFAIK sobald man von System.in readLine() aufruft, wird das Programm solage angehalten, bis "Enter" gedrückt wird, also eine neuen Line da ist. Da Scanner System.in benutzt, wird wahrscheinlich auch read oder readline benutzt. Also wartet das Programm immer nach jeder Zeile auf die nächste.
Es gibt dummerweise soweit ich weiß in JAVASE 6 keine "Lies 'System.in' aber halte das Programm bitte nicht an, wenn nichts mehr da ist" Funktion. Eine einfache möglichkeit wäre es zu überprüfen,
while(!Fehler && eingabe.hasNextLine())
und dann eben nurSystem.out.println(Breite + " " + Hoehe);
als ausgabe.
D.h. es wird so lange eingelesen, bis eine ungültige (z.B.: leerzeile) kommt und dann das Programm beendet und die größe ausgegeben.
-
Habs nochmal verändert nur weis ich nicht was in diesem code falschs sein soll:
import java.util.*; class aascii { public static void main(String[] args) { Scanner sc= new Scanner(System.in); int Hoehe=0; int Breite=0; int i = sc.nextLine().length(); String zeile; boolean fehler=true; while(sc.hasNextLine() || fehler = false) { zeile=sc.nextLine(); Breite= zeile.length(); if(Breite>i || Breite<i) { fehler=false; } Hoehe++; } if(fehler){ System.out.println(Breite+" "+Hoehe); } else { System.out.println("INPUT MISMATCH"); } } }
greetz
-
while(sc.hasNextLine() || fehler == false)
Alternativ : while(fehler && sc.hasNextLine())a = b; Zuweseisung
a == b VergleichAußederdem:
if(Breite>i || Breite<i) { fehler=false; } //sollte zu: fehler = (Breite==i); //werden
sonst würde ich noch fehler in valid umbenennen, da es ja anfangs immer richtig ist und wenn fehler == false sein soll abgebrochen werden soll.