hilfe bei der eingabe



  • hallo leute,

    ich versuche gerade ein programm von mir in java umzuschreiben, aber es will einfach nicht klappen.
    habe immer den fehler bei der eingabe. das programm kann einfach nicht zeichen auslesen. habe schon alles mögliche, wovon ich weiß, ausprobiert, aber es klappt einfach nicht...bitte euch deswegen um hilfe.

    die jeweiligen fehlermeldungen habe ich im code auskommentiert.
    in c++ ist es so einfach mit cin, aber verstehe nicht, wieso in java so kompliziert ist

    erledigt
    

    dankeschön im voraus!

    lg



  • also der zweite fehler ist leicht auszumachen, hast du mal c programmiert? ^^

    leuchtet schaltern an oder aus sollten doch alles
    ja oder nein sachen sein, dafür gibt es einen speziellen datentyp boolean der true =1 oder false = 0 sein kann

    der andere Fehler: was soll in denn sein??
    wenn du gerade versuchst java zu lernen würde ich sagen dass du in sachen ein und ausgabe zunächst auf die klasse scanner zugreifst oder noch besser die klassen von mössenböck verwendest, da diese sehr einfach zu bedienen sind
    [die mössenböck klassen sind hier zu finden: http://www.ssw.uni-linz.ac.at/Misc/JavaBuch/#InOut

    bin selbst java-neuling also keine garantie auf irgendeine aussage^^



  • danke erstmal für die antwort. ehrlich gesagt verstehe ich nicht was du so genauer meinst. 😛
    ich habe was mit c++ zu tun, aber nicht mit c.
    du meinst, ich soll die 0 und 1 durch true der false ersetzen ?
    das bringt doch gar nix 😉
    werde versuchen den zweiten fehler irgendwie hin zu kriegen 😉

    lg

    edit:
    habe bisschen den code geändert, aber das mit der eingabe will einfach nicht klappen. bekomme die fehlermeldung: Type mismatch: cannot convert from int to char



  • Dann deklariere doch z einfach als int.



  • danke einen anderen user habe ich den boolean fehler beheben können.
    aber das mit dem true false hat nicht funktioniert, sondern ich habe einfach so gelöst: if(Leuchtet() == 1)

    der andere fehler ist noch immer da. habe auch schon als int deklariert gehabt, bekam aber folgende fehlermeldung: unhandled exception type IOException
    außerdem möchte ich am anfang den wert a zuweisen.



  • Exceptions werden mit try + catch abgefangen. Insgesamt und mit ordentlichen booleans sieht das so aus:

    package taschenlampe;
    
    import java.io.*;
    
    public class Taschenlampe {
    	public Taschenlampe() {
    		Schalter = false;
    		Lampe = true;
    		Batterie = true;
    	}
    
    	public void Ausschalten() {
    		Schalter = false;
    	}
    
    	public void Einschalten() {
    		Schalter = true;
    	}
    
    	public boolean Leuchtet() {
    		return (Lampe && Schalter && Batterie);
    	}
    
    	private boolean Batterie;
    	private boolean Lampe;
    	private boolean Schalter;
    
    	public static void main(String[] args) {
    		int z = 'a';
    		Taschenlampe t1 = new Taschenlampe();
    		System.out.println("Bedienung: e..ein a..aus x..ende\n");
    		do {
    			try {
    				z = System.in.read();
    			} catch (IOException e) {
    				return;
    			}
    
    			if (z == 'e') {
    				t1.Einschalten();
    			}
    
    			if (z == 'a') {
    				t1.Ausschalten();
    			}
    
    			if (t1.Leuchtet()) {
    				System.out.println("Taschenlampe leuchtet.");
    			} else {
    				System.out.println("Taschenlampe leuchtet nicht.");
    			}
    		} while (z != 'x');
    	}
    }
    


  • damoit er sich noch nicht mit den exceptions rumschölagen muss hab ich ihm ja die Mössenböck-klassen empfohlen die nehmen ihm das erstb mal ab

    wenn du schon mal c++ gemacht hast warum verwendest du int und nicht bool oder in java eben boolean?

    ansonsten stimme ich mit dasd überein



  • shisha: weil es dort auch mit int funktioniert hat. habe dabei nichts gedacht, dass es hier nicht gehen würde.

    Dasd: wieso wird die ausgabe so oft gemacht?
    zb. ich gebe e ein und klicke enter, dann zeigt er mir den text 3-mal

    das ist mir irgendwie unklar.



  • Da du am Ende der Eingabe Enter drückst, wird noch ein Zeilenumbruch (NL+CR) hinzugefügt. Diese beiden Zeichen sorgen dafür, dass die Schleife noch zweimal zusätzlich ausgeführt wird. Umgehen kannst du das indem du nach dem read() noch ein skip(2) aufrufst, um diese beiden Zeichen dann zu ignorieren.



  • danke an euch beiden! das mit dem nl und cr wäre ich nicht von alleine draufgekommen..

    lg


Anmelden zum Antworten