System.in.read() Boolsche Werte vergleichen

Carlo12345

Mitglied
Hallo liebe Leute,

ich hab mich wegen diesem Problem hier angemeldet. Ich versuche seit Tagen eine Lösung zu finden stehe aber immer wieder vor neuen Hürden und Fehlern. Ich habe die Aufgabe ein Programm zu schreiben, dass vom User eingegebene Werte miteinander vergleicht.

Also zuerst gebe ich T oder F ein, dann wird ein Operator abgefragt "&" oder "|" oder "^", dann ein weiteres mal T oder F eingeben( Groß - und Kleinschreibung soll möglich sein und wenn jeweils ein unerlaubtes Zeichen eingegeben wird soll eine passende Fehlermeldung erscheinen). Die eingegebenen Werte sollen dann eben das richtige Ergebnis ausspucken also T&T = True usw.

Jedenfalls berechnet mein Programm die falschen Werte. Ich bitte um Hilfe!

Tut mir leid. Wie füge ich einen Code ein?

Danke für eure Hilfe
________________________________________________________________________________________________________________________________________________________
Java:
package AnalyseMeb2;

public class AnalyseMeb2 {
	public static void main(String[]args) 
			throws java.io.IOException {
		boolean a = false;
		boolean b = false;
		
		char input1;
		char input2;
		char input3;
		int operator = 0;
		
		
		String error = "Bitte tippe T oder F ein";
		String error2 = "Bitte wähle '&' oder '|' oder '^'";
		
	System.out.println("Enter first Character");
	input1 = (char) System.in.read();
	if ((input1 == 'T') || (input1 == 't' ))  a = true;	
	if ((input1 == 'F') || (input1 == 'f' )) a = false;
	
	else {
		System.out.println(error);
		System.in.close();
	}
	
	input1 = (char) System.in.read();
	input1 = (char) System.in.read();
	
	
	System.out.println("Bitte geben Sie einen Operanden ein");
	input2 = (char) System.in.read();
	if(input2 == 38) { operator = 0; // &
	if(input2 == 124) // |
		operator = 1;
	if(input2 == 94) // ^
		operator = 2;
	System.out.println("Bitte geben sie einen zweiten Character ein");
	}
	else {
		System.out.println(error2);
	}
	
	input2 = (char) System.in.read();
	input2 = (char) System.in.read();
	input2 = (char) System.in.read();
	
	
	System.out.println("Enter first Character");
	input3 = (char) System.in.read();
	if ((input3 == 'T') || (input3 == 't' )) {
		a = true;	
	if ((input3 == 'F') || (input3 == 'f'))
		a = false;
	}
	else {
		System.out.println(error);
		System.in.close();
	
			}
	
	  //Figure out result
   boolean result;
   switch (operator) {
    case 0:
     result = a&b;   
    case 1:
      result = a|b;
    case 2:
      result = a^b;

      System.out.println("Das Ergebnis lautet: " );
      System.out.println(result);
	
    	}
	}
}
 
Zuletzt bearbeitet von einem Moderator:
K

kneitzel

Gast
Also da gibt es viele Dinge, die direkt ins Auge fallen:

if ((input1 == 'T') || (input1 == 't' )) a = true;
if ((input1 == 'F') || (input1 == 'f' )) a = false;

else {

Hier hast Du zwei Dinge:
1) das erste if.
2) Das if / else.
Also wenn input1 T oder t ist, dann wird a auf true gesetzt und danach wird der else Zweig des zweiten ifs ausgeführt, da input1 nicht F oder f ist.

Wieso machst du nicht einfach ein switch Befehl? Erst case 'T' und case 't' mit Befehl und break; dann 'F' und 'f' mit der Zuweisung und break; Der else Block ist dann der default part.

System.in.close();

Wo hast Du den System.in geöffnet? Wenn Du etwas nicht geöffnet hast, dann schließt Du es auch in der Regel nicht.

input2 = (char) System.in.read();
if(input2 == 38) { operator = 0; // &
if(input2 == 124) // |
operator = 1;
if(input2 == 94) // ^
operator = 2;
System.out.println("Bitte geben sie einen zweiten Character ein");
}
else {
System.out.println(error2);
}
Wenn input2 38 ist, dann setzt Du operator auf 0 und prüfst, ob es 124 ist (kann es ja nicht sein, ist ja 38. Dann die Prüfung auf 94 ..... dann kommt die Ausgabe .... Der Else Zweig ist vom ersten if - also immer wenn es nicht 38 ist, dann wird error2 ausgegeben ....

switch (operator) {
case 0:
result = a&b;
case 1:
result = a|b;
case 2:
result = a^b;
Also wenn operator 0 ist, dann wird resultat a&b; dann a|b und dann a^b, denn er "fällt durch". Also so ein case immer mit break; beenden so du nicht z.B. mit einem return die Methode verlässt.

Das sind hoffentlich erst einmal genug Hinweise, um Fehler zu beheben. Zur Not noch einmal die Grundlagen zu if und switch durchlesen und paar einfachere Beispiele durchgehen.
 

Carlo12345

Mitglied
Das sind schon mal einige Dinge für die ich noch ein Auge entwickeln muss. Ist mir nicht aufgefallen.

Ich danke dir sehr!

Ich versuche es weiter. Melde mich dann wieder ;) :)
Gruß
 

Carlo12345

Mitglied
Ich habe den ganzen Code jetzt nochmal geschrieben.

Bei der Auswahl des Operanden war es mir nicht möglich einen Switch Befehl anzuwenden. Wegen den Sonderzeichen?

Jedenfalls rutscht er jetzt bei Eingabe des ersten Characters einmal komplett durch. Was übersehe ich?

Vielen vielen Dank!


Java:
public class Progauf3b {

    public static void main(String[]args)
            throws java.io.IOException {
      
        boolean a = true;
        boolean b = true;
        char input;
        char chosenOp = 0;
              
        // Ersten Character festlegen
      
      
        System.out.println("Ersten Character bitte:");
        input = (char) System.in.read();
        switch(input) {
        case 'T':
            a = true;
            System.out.println("Geben Sie einen Operanden ein.");
        break;
        case 't':
            a = true;
            System.out.println("Geben Sie einen Operanden ein.");
        break;
        case 'F':
            a = false;
            System.out.println("Geben Sie einen Operanden ein.");
        break;
        case 'f':
            a = false;
            System.out.println("Geben Sie einen Operanden ein.");
        break;
        default:
            System.out.println("Wählen Sie T/t oder F/f");
          
            input = (char) System.in.read();
            input = (char) System.in.read();
          
        // Operand festlegen
      
        input = (char) System.in.read();
      
        if (input == 38) {
            chosenOp = 0;
        } else if(input == 124) {
            chosenOp = 1;
        } else if (input == 94) {
            chosenOp = 2;
        } else {
            System.out.println("Wählen Sie '&' oder '|' oder '^'");   
        }
      
        input = (char) System.in.read();
        input = (char) System.in.read();
          
        // zweiten Character fetlegen   
          
        }
        input = (char) System.in.read();
      
        switch(input) {
        case 'T':
            b= true;
            System.out.println("Das Ergebnis lautet.");
        break;
        case 't':
            b = true;
            System.out.println("Das Ergebnis lautet.");
        break;
        case 'F':
            b = false;
            System.out.println("Das Ergebnis lautet.");
        break;
        case 'f':
            b = false;
            System.out.println("Das Ergebnis lautet.");
        break;
        default:
            System.out.println("Wählen Sie T/t oder F/f");
        }
      
      
        // Ergebnis berechnen
      
        boolean result;
        switch (chosenOp) {
        case 0:
            result = a&b;
            System.out.println("Das Ergebnis lautet: " + result);
        break;
        case 1:
            result = a|b;
            System.out.println("Das Ergebnis lautet: " + result);
        break;
        case 2:
            result = a^b;
            System.out.println("Das Ergebnis lautet: " + result );
        break;
        }   
    }
}
 
Zuletzt bearbeitet von einem Moderator:
K

kneitzel

Gast
Was übersehe ich?
Dass Du code in [CODE][/CODE] Tags packen solltest, damit er lesbar ist.

Und wie schreibst Du Code? Hoffentlich nutzt Du eine IDE, welche Code automatisch einrückt! Denn dann erkennst Du auf einfache Art und Weise, wie weit welcher Block geht.

Einfache Frage: Bis wohin geht der Code von deinem default: Part?
 
K

kneitzel

Gast
Ach, das mit dem großen default Block bei dem ersten switch soll evtl. so sein. Dein Problem liegt evtl. einfach an der Eingabe über System.in.read().

Er nimmt die Eingabe des ersten Zeichens ja erst, wenn auch die Enter Taste gedrückt wurde, d.h. es gibt noch mehr Informationen in dem Stream, außer eben dem eingegebenen Zeichen.

Hier würde ich dir empfehlen, evtl. bei der Eingabe ein Tool zu nutzen. Ansonsten könntest Du auch vom Stream lesen, bis du ein Return gelesen hast. Also etwas in der Art wie while (System.in.read() != '\n');, was du nach jedem gelesenen Zeichen aufrufst.
Dann wertet er immer das erste Zeichen aus und ignoriert alle anderen folgenden... Oft wird aber z.B. die Scanner Klasse verwendet, um Eingaben vom Benutzer zu lesen....
 

Carlo12345

Mitglied
Ja sorry wegen dem Code. Bei meinem ersten Beitrag in diesem Thread hab ich es auch einfach so hinein kopiert und dennoch zeigt es ihn richtig an. Vllt wurde es ja von einem Moderator nachträglich geändert.

Ja ich benutze eine IDE (Eclipse).

Die Aufgabe erlaubt es mir nur sie mit System.in.read() zu lösen. Ich hab schon gehört das Scanner um einiges leichter sein soll :).

Ich benutze System.in.read() 2x zwischen den blöcken um das Return abzufangen. Habe ich aus einem Youtube video.

Ich hab´s jetzt mit deiner Variante gemacht. Ergebnis hab ich hineinkopiert.

Die erste Eingabe akzeptiert er. Nachdem ich der Aufforderung folge und den Operanden eingebe "springt" das Programm zum Ende und fragt die 3 Eingabe vom 2 Character gar nicht mehr ab sondern zeigt mir gleich das Ergebnis. Könnte das damit zusammenhängen, dass ich die "Shift" Taste bzw. AltGr Taste betätigen muss um die Operanden einzugeben und diese Tasten genau wie "Enter" einen Platz einnehmen?

Gruß

Code:
public class Progauf3b {

	public static void main(String[]args)
			throws java.io.IOException {
		
		boolean a = true;
		boolean b = true;
		char input;
		char chosenOp = 0;
				
		// Ersten Character festlegen
		
		
		System.out.println("Ersten Character bitte:");
		input = (char) System.in.read();
		while (System.in.read() != '\n');
		
		switch(input) {
		case 'T':
			a = true;
			System.out.println("Geben Sie einen Operanden ein.");
		break;
		case 't':
			a = true;
			System.out.println("Geben Sie einen Operanden ein.");
		break;
		case 'F':
			a = false;
			System.out.println("Geben Sie einen Operanden ein.");
		break;
		case 'f':
			a = false;
			System.out.println("Geben Sie einen Operanden ein.");
		break;
		default:
			System.out.println("Wählen Sie T/t oder F/f");
		
		
			//input = (char) System.in.read();
			//input = (char) System.in.read();
			
		// Operand festlegen
		
		input = (char) System.in.read();
		while (System.in.read() != '\n');
		
		if (input == 38) {
			chosenOp = 0;
		} else if(input == 124) {
			chosenOp = 1;
		} else if (input == 94) {
			chosenOp = 2; 
		} else { 
			System.out.println("Wählen Sie '&' oder '|' oder '^'");	
		}
		
		//input = (char) System.in.read();
		//input = (char) System.in.read(); 
			
		// zweiten Character fetlegen	
			
		}
		input = (char) System.in.read();
		while (System.in.read() != '\n');
		
		switch(input) {
		case 'T':
			b= true;
		break;
		
		case 't':
			b = true;
		break;
		
		case 'F':
			b = false;
		break;
		
		case 'f':
			b = false;
		break;
		
		default:
			System.out.println("Wählen Sie T/t oder F/f");
		}
		
		
		// Ergebnis berechnen
		
		boolean result;
		switch (chosenOp) {
		case 0:
			result = a&b;
			System.out.println("Das Ergebnis lautet: " + result);
		break;
		case 1:
			result = a|b;
			System.out.println("Das Ergebnis lautet: " + result);
		break;
		case 2:
			result = a^b;
			System.out.println("Das Ergebnis lautet: " + result );
		break;
		}	
	}
}
 

Ullenboom

Bekanntes Mitglied
Java:
public static void main(String[] args) {

  boolean bool1;

  switch ( new Scanner( System.in ).next().toLowerCase() ) {
    case "t": bool1 = true; break;
    case "f": bool1 = false; break;
    default:
      System.err.println("Fehlerhafte Eingabe!"); return;
  }

  String operator = new Scanner( System.in ).next();

  boolean bool2;

  switch ( new Scanner( System.in ).next().toLowerCase() ) {
    case "t": bool2 = true; break;
    case "f": bool2 = false; break;
    default:
      System.err.println("Fehlerhafte Eingabe!"); return;
  }

  switch ( operator ) {
    case "|" : System.out.println( bool1 | bool2 ); break;
    case "&" : System.out.println( bool1 & bool2 ); break;
    case "^" : System.out.println( bool1 ^ bool2 ); break;
    default: System.err.println("Fehlerhafter Operator!");
  }
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Variablen Komsiche System.in.read() return-value? Java Basics - Anfänger-Themen 3
W Input/Output System.in.read erzeugt nicht, was ich will Java Basics - Anfänger-Themen 1
C Input/Output System.in.read() gibt nicht -1 zurück? Java Basics - Anfänger-Themen 3
G Thread stoppen mit System.in.read() Java Basics - Anfänger-Themen 13
G Input/Output System.in.read & Scanner Java Basics - Anfänger-Themen 2
W Koordinaten mit System.in.read() setzen Java Basics - Anfänger-Themen 2
S System.in.read() Java Basics - Anfänger-Themen 2
C System.in.read() funktioniert nicht Java Basics - Anfänger-Themen 3
J System.in.read(): Unhandled exception type IOException Java Basics - Anfänger-Themen 12
B System.in.read() wird übersprungen Java Basics - Anfänger-Themen 5
S System.in.read() mehrmals nacheinander aufrufen Java Basics - Anfänger-Themen 3
G System.in.read() wartet nicht auf eingabe Java Basics - Anfänger-Themen 1
B Probleme mit Eingaben [System.in.read())] Java Basics - Anfänger-Themen 10
D System.out.println Java Basics - Anfänger-Themen 1
O System.out.println wird nicht ausgegeben? Java Basics - Anfänger-Themen 11
paulen1 Methoden Unerwünschte Ausgabe bei System.out.print in For-Schleife Java Basics - Anfänger-Themen 8
M Keine Ausführung von System.out.println() Java Basics - Anfänger-Themen 3
O System.out array Java Basics - Anfänger-Themen 4
J Programm beenden ohne System.exit() oder Runtime.exit() Java Basics - Anfänger-Themen 5
C System.out.println - Parameterübergabe funktioniert nicht Java Basics - Anfänger-Themen 2
N Input/Output Eine Frage über system.out.println. Java Basics - Anfänger-Themen 10
H Befehl wird nicht ausgeführt - System.out.println Java Basics - Anfänger-Themen 3
C system cannot be resolved Fehler in Eclipse Java Basics - Anfänger-Themen 18
S Anweisungen verstehen System.out.print/println Java Basics - Anfänger-Themen 2
B Warum werden meine System.out.println's übersprungen? Java Basics - Anfänger-Themen 9
I System.currentTimeMillis() nutzen Java Basics - Anfänger-Themen 2
R Erste Schritte Eclipse - Java - System.out.println(); funktioniert nicht Java Basics - Anfänger-Themen 2
B Input/Output System.out.print mit und ohne "" Java Basics - Anfänger-Themen 5
T System.out.println() Java Basics - Anfänger-Themen 5
M System.property persistieren Java Basics - Anfänger-Themen 6
N (Java) Regristrierung und Login System mit einer Datenbank Java Basics - Anfänger-Themen 5
A Input/Output System.out Ausgabe aktualisieren, ohne Konsole vollzuspamen Java Basics - Anfänger-Themen 2
R Input/Output Frage zu System.out.println Java Basics - Anfänger-Themen 5
S System.out.printIn("Hello, World!"); Java Basics - Anfänger-Themen 3
A Passwort System Java Basics - Anfänger-Themen 4
N Input/Output System.in funktioniert nicht Java Basics - Anfänger-Themen 4
S Input/Output System.out.println - Manipulieren bzw. Alternative..? Java Basics - Anfänger-Themen 2
E Was ist die JRE System Library? Java Basics - Anfänger-Themen 3
V System.out.println zu JTextArea Java Basics - Anfänger-Themen 6
V OOP System.out.println(Objekt) Java Basics - Anfänger-Themen 3
D int x in System.out.println(), aber wie? Java Basics - Anfänger-Themen 1
R warum kann System.out.println(..) etwas, was Swing-Elemente Nicht können ? Java Basics - Anfänger-Themen 11
N System Proxy verwenden Java Basics - Anfänger-Themen 0
C system.out.printf mit streams benutzen Java Basics - Anfänger-Themen 7
L system.print.out geht nicht Java Basics - Anfänger-Themen 11
D Ausgabe einer Matrix mit System.out.println Java Basics - Anfänger-Themen 6
F System kann die Datei nicht finden Java Basics - Anfänger-Themen 7
R ArrayList - System.out.println nur einmal, statt 10 mal Java Basics - Anfänger-Themen 5
M Verwendung von System.exit(0) problematisch? Java Basics - Anfänger-Themen 1
D system.out.println >> JTextArea Java Basics - Anfänger-Themen 1
O Frage zu System.out.println() Java Basics - Anfänger-Themen 1
G System.out.printf geht nicht Java Basics - Anfänger-Themen 6
A System.out.println() - Aufbau Java Basics - Anfänger-Themen 1
D JDK installieren No JVM could be found on your system. Java Basics - Anfänger-Themen 9
Z System(einstellungen) per Java ändern/Steuern | Betriebssystembezogen Java Basics - Anfänger-Themen 7
M Variablen Ausgabe bei System.out.format? Java Basics - Anfänger-Themen 3
FrankR2 Grundsätzliches Verständnisproblem: Java 32/64-bit; Windows 7/8, 32/64-bit-System Java Basics - Anfänger-Themen 5
D kleines problem bei system.out.println schreibweise Java Basics - Anfänger-Themen 6
J Umgang mit System.out.println() und .print() Java Basics - Anfänger-Themen 6
C Kleines Problem mit System.out.print Java Basics - Anfänger-Themen 1
G classname.System.out.println(); ? Java Basics - Anfänger-Themen 2
H Einfluss von System.out auf Programm Java Basics - Anfänger-Themen 2
K System.currentTimeMillis() und die Sommerzeit Java Basics - Anfänger-Themen 5
M Wann PATH und wann JAVA_HOME in Windows System 7 setzen? Java Basics - Anfänger-Themen 2
M CSV-File aus datei system einlesen Java Basics - Anfänger-Themen 3
R Char wird in System.out.print(); nicht ausgegeben Java Basics - Anfänger-Themen 6
T System.out.print : Frage zu Aufbau Java Basics - Anfänger-Themen 4
P Update System Java Basics - Anfänger-Themen 16
T If ; else error on system token delete Java Basics - Anfänger-Themen 5
M System.getProperty("java.vm.version") liefert build-Version Java Basics - Anfänger-Themen 4
O If in System.out.println Java Basics - Anfänger-Themen 11
J HILFE Benutzen einer Klasse aus JRE System Library Java Basics - Anfänger-Themen 4
T Erste Schritte import java.lang.System.out Java Basics - Anfänger-Themen 4
N Erste Schritte Ausgabe in System.out Java Basics - Anfänger-Themen 13
D Scanner(System.in) Schleife Java Basics - Anfänger-Themen 7
H System.out umleiten Java Basics - Anfänger-Themen 5
J Erste Schritte System.out.print (Fehlermeldung) Java Basics - Anfänger-Themen 14
C System.out in String schreiben Java Basics - Anfänger-Themen 2
P System - Tage erkennen ( System Time ?) Java Basics - Anfänger-Themen 3
lulas[]args Alternative zu System.err.println(); Java Basics - Anfänger-Themen 5
X Eclipse System.out.print fehler Java Basics - Anfänger-Themen 5
K char-int-Addition in System.out.print Java Basics - Anfänger-Themen 3
O Tabelle Formatieren mit system.out.format Java Basics - Anfänger-Themen 11
F System.getProperty("line.separator") funkt. nicht Java Basics - Anfänger-Themen 4
N Erste Schritte System.err und System.out Java Basics - Anfänger-Themen 5
Z System.out.format, Hilfe. Java Basics - Anfänger-Themen 14
C System.out.println Java Basics - Anfänger-Themen 4
R System.exit mit String als Rückgabedatentyp Java Basics - Anfänger-Themen 3
G Input/Output System.err zusätzlich in Datei schreiben Java Basics - Anfänger-Themen 27
A Problem beim Ausführen einer .jar datei auf externen System Java Basics - Anfänger-Themen 5
S Input/Output Neuen InputStream System.in setzen Java Basics - Anfänger-Themen 11
I Input/Output System.out.println formatierung? möglich? Java Basics - Anfänger-Themen 2
J Schleife und system.exit(); Java Basics - Anfänger-Themen 2
ruutaiokwu System.err.print(ln) macht ein durcheinander??! Java Basics - Anfänger-Themen 8
D Frage zu System.out.println() Funktion Java Basics - Anfänger-Themen 6
J System.out - Zwischenablage Java Basics - Anfänger-Themen 5
T System.out.printf Zeilenumbruch nach x Stellen Java Basics - Anfänger-Themen 4
Guybrush Threepwood System.exit(int status) Java Basics - Anfänger-Themen 3
L Kein System.out Java Basics - Anfänger-Themen 14
M System.nanoTime Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben