Problem mit der Eingabe

jimboob

Grünschnabel
Hallo,

habe gerade erst mit Java angefangen und verstehe nicht was bei meiner Übung falsch ist.
Es sollen zwei Zahlen eingelesen werden, aber nach der erste Eingabe ist Schluß.

mein quelltext:


import java.io.*;

class GGT{


public static void main (String [] args) throws IOException{


BufferedReader in = new BufferedReader
(new InputStreamReader(System.in));

System.out.println("GGT suchen");
System.out.println("erste zahl");
int a = in.read ();
System.out.println("zweite zahl");
int b = in.read ();
System.out.println("Der GGT von "+a+" und von "+b+" ist ");

while (a != b)
if (a > b) a -=b;
else b -=a;
System.out.println(a);

}
}

Was ist falsch bzw. was fehlt?
Beim googlen und hier habe ich zwar Lösungen zur Eingabe gefunden,aber die basieren alle auf einer zusätzlichen Klasse bsp SimpleIO oder ähnliches.
Das möchte ich aber nicht so übernehem und selbst Schreiben; bin noch nicht soweit.

Hoffe auf Hilfe
danke
 
Zuletzt bearbeitet:
Das ganze ist *fast* richtig, ich hoffe ich kann dir verständlich erklären was du falsch machst:

Du legst um den Eingangsstrom der Konsole einen BufferedReader und beginnst mir
.read() aus dem Strom (siehe Java API: der BufferedReader behandelt Zeichenströme)
Zeichen auszulesen.
Dein Programm startet und du gibst meinetwegen 1 und Enter ein. Der Ascii code für die 1 ist die 49 und ein Enter besteht intern aus dem Code 13 und 10.
Das heisst dein Buffer hat jetzt die 49, 13 und 10 auf einen Schlag gepuffert und du liest ein Zeichen ab: In a steht nun 49. Da der Buffer noch dein .read() bedienen kann wird gleich darauf die 13 in das b gelesen...
Ich denke du verstehst das Problem...

Logisch ist auch: read() gibt dir einen int zurück obwohl du eigentlich einen String eingibst... das macht es deshalb weil es den ASCII Code und nicht den übertragenen zahlenwert liefert...

Lösung: du musst eine ganze Zeile einlesen. Das funktioniert mit
in.readLine()
Allerdings liefert das nun einen String zurück, den du in einen int umwandeln musst.

Insgesamt sieht das ganze dann in etwa so aus:

Code:
import java.io.*;

class GGT{

    public static void main (String [] args) throws IOException {

        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

        System.out.println("GGT suchen");
        System.out.println("erste zahl");
        int a = Integer.parseInt(in.readLine());
        System.out.println("zweite zahl");
        int b = Integer.parseInt(in.readLine());
        System.out.println("Der GGT von "+a+" und von "+b+" ist ");

        while (a != b)
            if (a > b) a -=b;
        else
            b -=a;
            
        System.out.println(a);

    }
}

Hoffe du verstest das seltsame "Phänomen" jetzt :)

viel Spass noch,
Andy
 
Hallo Andy,

ja vielen Dank.
Wie du schon sagst "Phänomen"..*g
Ich habe schon einiges gelesen, aber es nicht verstanden,
aber das war jetzt ausführlich und verständlich.
Danke schön

gruß
jim
 
Noch eine Frage...*g

Dieses umwandeln, also von String in Integer
passiert das hier: int a = Integer.parseInt(in.readLine()); durch das "Integer.pareInt." ?
und ist das was man Casting nennt?

gruß
 
Hi,

es gibt explizites und implizites Casting. Wie explizit schon angibt, musst du dies angeben um einen Cast durchzuführen, bspw.

Code:
final double PI = 3.12;
int zahl = 8;
int i = (int) (PI * zahl); // <- explizites casten durch Angabe

und implizit wird durchgeführt ohne, dass eine Angabe notwendig ist. ! Funktioniert nicht immer bspw. wäre

Code:
double x = 3.14;
int i = x; // <- Genauigkeitsverlust

falsch. Funktionieren würde

Code:
int zahl = 8;
long longZahl = zahl; // <- implizites casten

Explizites casten wird also durch die Klammern "(" und ")" angegeben.

Hoffe das ist verständlich und mir sind keine Flüchtigkeitsfehler unterlaufen.
 
Zurück