Eingabe im Terminal nicht möglich

mYwaY

Mitglied
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

Hat jemand eine Idee, wo ich in der zweiten Möglichkeit einen Fehler eingebaut habe?!

LG
 
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.
 
Dann würde er für die zweite Ausgabe aber doch auch das "s" als Eingabe auswerfen, oder?
Try/catch wird irgendwie gar nicht ausgeführt?!
 
Mach die zweite Ausgabe mal so:
Code:
           System.out.println("Eingabe gemäß Möglichkeit 1 Variante 2 als Einzelzeichen \t " + (char)a +"!");
Dann wirst du sicher sehen dass vor dem abschliessenden "!" ein Zeilenvorschub ist
 
Ungefähr so:

Code:
        System.out.println ("Neue Eingabe bitte");
        i=System.in.read();
        while (System.in.read() != -1) {
             ;
        }
        System.out.println("Eingabe gemäß Möglichkeit 1 als Einzelzeichen \t " + (char)i );

Und genau so machst du es weiter unten bei der nächsten Eingabemöglichkeit.
 
Ungefähr so:

Code:
        System.out.println ("Neue Eingabe bitte");
        i=System.in.read();
        while (System.in.read() != -1) {
             ;
        }
        System.out.println("Eingabe gemäß Möglichkeit 1 als Einzelzeichen \t " + (char)i );

Und genau so machst du es weiter unten bei der nächsten Eingabemöglichkeit.
An eine Schleife hatte ich auch schon gedacht 🙂
Allerdings führt das ins Endlose, wenn ich das so mache...
java EA3
s

Neue Eingabe bitte:
Eingabe gemäß Möglichkeit 1 als Einzelzeichen:

s

Neue Eingabe bitte:
Eingabe gemäß Möglichkeit 1 als Einzelzeichen:

s

Neue Eingabe bitte:
Eingabe gemäß Möglichkeit 1 als Einzelzeichen:

ss
 
Zuletzt bearbeitet:
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:
| => java EA3

Neue Eingabe bitte:
e
w
s
d
s
a

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:

Code:
            System.out.println ("\nNeue Eingabe bitte: ");
            i=System.in.read();
            while (System.in.available()>0) {
                System.in.read();
            }    // while-Schleife
            System.out.println("Eingabe gemäß Möglichkeit 1 als Einzelzeichen: \t " + (char)i );
 
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.

Ich habe es so probiert, aber er lander immer in der Endlosausgabe bei der zweiten Variante...

Code:
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.available()!=0)
                {
                    System.out.println("Eingabe gemäß Möglichkeit 1 Variante 2 als Einzelzeichen: \t " + (char)a );
          
                }    // while-Schleife
 
Das ist auch falsch. Du schreibst deinen Code ganz normal in den try-Block. Zum catch-Block kommte er ja nur wenn eine Exception fliegt.
 
Also so:
Code:
        // Es wird nun die zweite Eingabemöglichkeit implementiert.
        System.out.println("\nNeue Eingabe bitte: ");

        try {
            a = System.in.read();
            while (System.in.available() > 0) {
                System.in.read();
            }    // while-Schleife
            System.out.println("Eingabe gemäß Möglichkeit 1 Variante 2 als Einzelzeichen: \t " + (char) a + "!");
        } // trye
        catch (java.io.IOException e) {
            System.out.println("Eingabefehler " + e);
        }    // catch (java.io.IOException).
 

Neue Themen


Zurück
Oben