System.in.read | "komisches" Programmverhalten

HPB

Erfahrenes Mitglied
mein Code:
import java.io.*;

class InstanceCount{
//Klassenvariablen
static int anzahlInstanzen=0;
static int eingabe;

//Konstruktor
public InstanceCount(){
InstanceCount.anzahlInstanzen++;
System.out.println(anzahlInstanzen+". Instanz erzeugt.");
}


public static void main(String args[]){
System.out.println("Zum Erzeugen einer neuen Instanz bitte"+
"\"+\" druecken (Ende: e)");
do {
System.out.print("Eingabe >>");
try{
eingabe=System.in.read();
} catch(IOException ioe) {System.err.println("IOException!");}
if (eingabe=='+') {
InstanceCount instanz = new InstanceCount();
}
} while (eingabe!='e');
}
}

meine Frage:
1) wie fange ich die Benutzereingabe direkt zeichenweise ab? Im Moment muß man return drücken.
2) Beim Ausführen zeigt das Programm ein etwas merkwürdiges verhalten:
instanceCount_tutorials.de.jpg

Wieso kommt die Eingabeaufforderung mehrmals? Liegt das daran, dass man seine Eingabe mit return bestätigt?

vorgestellt hatte ich mir das ganze so, ...
Eingabe >> +
1. Instanz erzeugt //korrekt
Eingabe>> d //falsche eingabe
Eingabe>>+
2. Instanz erzeugt
[...]
Eingabe>> e //Programmende


Danke für eure Hilfe,

PETER
 
Servus!

Deine Version spuck 3 mal "Eingabe" aus, weil die System.in.read() Methode immer nur ein Zeichen einließt und dann weiterläuft ...
da jedoch nach der Eingabe von "+" und anschließendem Enter noch ein implizites \n\r vom System nachgeschoben wird, findet dein Programm drei Zeichen vor und geht deshalb 2 mal zuviel in die Schleife ...

das unten stehende Beispiel kann das verlangte ...

Code:
import java.io.*;

class InstanceCount{
//Klassenvariablen
static int anzahlInstanzen=0;
//static int eingabe;
private static String eingabe = "";

//Konstruktor
public InstanceCount(){
	InstanceCount.anzahlInstanzen++;
	System.out.println(anzahlInstanzen+". Instanz erzeugt.");
}


public static void main(String args[]){
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		System.out.println("Zum Erzeugen einer neuen Instanz bitte"+
"\"+\" druecken (Ende: e)");
	do {
		System.out.print("Eingabe >>"); 
		try{ 
			eingabe=br.readLine(); //System.in.read();
		} catch(IOException ioe) {System.err.println("IOException!");}
		if (eingabe.equals("+")) {
			InstanceCount instanz = new InstanceCount(); 
		}
		} while (!eingabe.equals("e")); 
	}
}
 
Zurück