Java System.in.read() funktioniert nicht richtig?

... komplette Frage anzeigen

3 Antworten

Mit System.in.read() kannst du nicht einfach eine ganze Zahl einlesen.

System.in.read() gibt dir nur das nächste Zeichen (also nur die nächste einstellige Zahl) zwar in Form eines Integers aber eigentlich als char zurück.

Wenn du nun eine einstellige Zahl mit System.in.read() einlesen möchtest um sie ganz einfach wieder auszugeben reicht folgendes:

int zahl = System.in.read();
System.out.print((char)zahl);

Wenn du eine mehrstellige Zahl einlesen möchtest musste du so vorgehen:

int zahl;
while((zahl = System.in.read()) != 10)    // char -> 10 bedeutet Zeilenende
{
   System.out.print((char)zahl);
}

Wenn du die Eingabe als Integer verwerten möchtest und dazu "verpflichtet" bist System.in.read() zu verwenden, müsste das ungefähr so aussehen:

        int ergebnis = 0;
        int zahl;

        int multiplikator = 1; // Zum Prüfen der Vorzeichen

        while((zahl = System.in.read()) != 10)  // char -> 10 bedeutet Zeilenende
        {
            if((char)zahl == '-')
            {
                multiplikator *= -1;
            }
            else if(zahl >= 48 && zahl <= 57)  // Prüfe ob Zahl ist -> (char)48 = '0' | (char)57 = 9
            {
                ergebnis*=10;  //erklärt sich von selbst
                ergebnis += (zahl-48); // minus 48 weil (char)48 = 0, (char)49 = 1 ...
            }
        }

        ergebnis*= multiplikator; //Vorzeichen beachten


        System.out.println(ergebnis);

Ansonsten kann du, wie schon richtig gesagt wurde einfach einen fertigen Scanner nutzen

    int zahl = 0;
    java.util.Scanner scanner = new java.util.Scanner(System.in);
    zahl = scanner.nextInt();

Ich persönlich finde die selbst geschriebenen Methoden meist schöner. ;)

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Waldelb3
15.10.2012, 22:41

Ich hab es jetzt so gelöst:

public static void main(String[] args) {
    // TODO Auto-generated method stub
    BufferedReader console = new BufferedReader(new InputStreamReader(System.in));
    int zahl;
    System.out.println("Geben Sie eine Zahl ein:");
    try {
      zahl = new Integer(console.readLine()).intValue();
      System.out.print("Sie haben die Zahl " + zahl + " eingegeben.");
    }
    catch (IOException e){
      System.out.println("Fehler");

funktioniert auch :D Oder gibts da irgendwelche Nachteile?

0

Hallo, ich habe was gefunden:

import java.util.Scanner; int zahl = 0;

Scanner sc = new Scanner(System.in);

zahl = sc.nextInt();

Probier das bitte mal, ich suche noch eine Möglichkeit raus!

Antwort bewerten Vielen Dank für Deine Bewertung

Hier noch eine Möglichkeit:

import javax.swing.*;

String Eingabe1 = JOptionPane.showInputDialog ("Gib eine Zahl ein:");

int Zahl1 = Integer.parseInt(Eingabe1);

Antwort bewerten Vielen Dank für Deine Bewertung

Was möchtest Du wissen?