Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Hallo Leute,
ich versuche gerade in ein Programm drei verschiedene Arten von Eingabemöglichkeiten zu implementieren. Die erste Möglichkeit funktioniert super, nur nun bei der zweiten wirft er mir im Terminal den gewählten Text aus, überspringt aber die Eingabemöglichkeit und wirft direkt System.out.println mit aus.
Code:
import java.io.*;
import java.util.Scanner;
// Dieses Programm beinhaltet für den Benutzer drei verschiedene Möglichkeiten
// eine Eingabe zu tätigen.
public class EA3 {
// Benutzer wird aufgefordert, für die erste Möglichkeit eine Eingabe
// zu tätigen.
public static void main(String args[]) throws IOException
{
int i = 32; // i wird initialisiert.
int a = 31; //a wird initialisiert.
System.out.println ("Neue Eingabe bitte");
i=System.in.read();
System.out.println("Eingabe gemäß Möglichkeit 1 als Einzelzeichen \t " + (char)i );
// Es wird nun die zweite Eingabemöglichkeit implementiert.
System.out.println ("Neue Eingabe bitte: ");
try
{
a=System.in.read();
} // try
catch (java.io.IOException e)
{
System.out.println ("Eingabefehler "+ e);
} // catch (java.io.IOException).
System.out.println("Eingabe gemäß Möglichkeit 1 Variante 2 als Einzelzeichen \t " + (char)a );
} // main(String[] args).
} // public class EA3.
Im Terminal sieht es dann wie folgt aus:
| => java EA3
Neue Eingabe bitte
s
Eingabe gemäß Möglichkeit 1 als Einzelzeichen s
Neue Eingabe bitte:
Eingabe gemäß Möglichkeit 1 Variante 2 als Einzelzeichen
Ich denke mal du hast gar keinen Fehler eingebaut. Vermutlich liest er beim ersten read das Zeichen "s" und beim zweiten read liest er den Zeilenvorschub den du nach dem "s" eingegeben hast und der noch im Eingabepuffer steht.
Dein read() liest ja ein Byte als int ein. Du könntest nun alle folgenden Zeichen im Eingabepuffer so lange einlesen bis dein read() -1 zurückgibt, dann ist alles gelesen und du kannst mit dem nächsten Schritt weitermachen
Dein read() liest ja ein Byte als int ein. Du könntest nun alle folgenden Zeichen im Eingabepuffer so lange einlesen bis dein read() -1 zurückgibt, dann ist alles gelesen und du kannst mit dem nächsten Schritt weitermachen
Ich glaube ich sehe gerade den Wald vor lauter Bäumen nicht...
Also wenn ich den Code so gestalte, wie du das oben gemacht hast, wirft er folgendes aus:
Er landet quasi nur in einer Endlosschleife, sogar ohne dass eine neue Aufforderung erscheint.
Hier der Code:
Code:
public class EA3 {
// Benutzer wird aufgefordert, für die erste Möglichkeit eine Eingabe
// zu tätigen.
public static void main(String args[]) throws IOException
{
int i = 0; // i wird initialisiert.
int a = 0; // a wird initialisiert.
System.out.println ("\nNeue Eingabe bitte: ");
i=System.in.read();
while (System.in.read() != -1) {
} // while-Schleife
System.out.println("Eingabe gemäß Möglichkeit 1 als Einzelzeichen: \t " + (char)i );
// Es wird nun die zweite Eingabemöglichkeit implementiert.
System.out.println("\nNeue Eingabe bitte: ");
try
{
a=System.in.read();
} // try
catch (java.io.IOException e)
{
System.out.println("Eingabefehler "+ e);
} // catch (java.io.IOException).
while (System.in.read() != -1)
{
System.out.println("Eingabe gemäß Möglichkeit 1 Variante 2 als Einzelzeichen: \t " + (char)a +"!" );
} // while-Schleife
} // main(String[] args).
} // public class EA3.
Ok, lag nicht an dir. In der Javadoc zu System.in.read() steht er liefert -1 wenn der Inputstream keine Zeichen mehr enthält. Tut es aber nicht sondern blockiert. Also machst du es so:
Super danke, so klappt es mit der erste Variante. Wie läuft das bei der zweiten Variante mit try/catch ab? Ich möchte ja die Eingabemöglichkeit über try aufrufen und nicht über System.in.read() in der Schleife.
Super danke, so klappt es mit der erste Variante. Wie läuft das bei der zweiten Variante mit try/catch ab? Ich möchte ja die Eingabemöglichkeit über try aufrufen und nicht über System.in.read() in der Schleife.