Tastatureingabe funktioniert nicht

  • Themenstarter Themenstarter Guest
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hi,
ich habe versucht (!) ein Programm zu schreiben, dass Zahlen sortiert. Mit einem Array das ich im Programm selber festgelegt habe hat das auch funktioniert.

Jetzt wollte ich das ganze mit einer Tastatureingabe machen, und zwar möchte ich erst abfragen, wie viele Elemente das Array haben soll und dann mit einer for-Schleife soviele Zahlen einlesen. Ich habe früher nur ein bisschen Pascal programmiert und hab deshalb etwas ähnliches wie Readln gesucht.. naja mein versuch habe ich hier mal, vllt kann mir ja jemand schreiben wies richtig lauten muss:




import java.io.*;
public class sortieren2 {

public static void main(String[] args) {


// Suchfeld durch Tastatureingabe initialisieren
System.out.println("Bitte geben sie ein wie viele Zahlen sortiert werden sollen: ");
int laenge = readInteger();

int[] suchfeld = new int[laenge];
for (int i=0; i< laenge; i++) {
suchfeld = readInteger();
}
...
 
Tja, dazu kann ich nur sagen, dass sich da SUN nicht so viel Mühe gegeben hat. Die Ausgabe geht mit einer Methode, allerdings klappt das gleiche mit der Eingabe nicht.

Um eine Zahl einzulesen muss da schon ein wenig mehr Arbeit reingesteckt werden. Kopier dir einfach die Methode in den Code und du kannst sie benutzen:

Code:
  public int readInt() throws IOException
  {
    BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
    
    return Integer.parseInt(in.readLine());
  }

Eine IOException wird ausgelöst falls beim Einlesen ein Fehler aufgetreten ist. Außerdem fehlt noch die Abfrage auf NumberFormatException falls der Benutzer keine Zahl eingibt.
 
Hab das jetzt gemacht aber bekomms trotzdem nicht hin :-/
hab bestimmt die Methode falsch eingebaut oder so, aber ist halt wirklich ne Umstellung erstmal, viielleicht kann ja nochmal jemand gucken:

Code:
import java.io.*;
public class sortieren2 {

        public int readInt() throws IOException {
            BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
            return Integer.parseInt(in.readLine());
        }


    public static void main(String[] args) {

        // Suchfeld durch Tastatureingabe initialisieren
        System.out.println("Bitte geben sie ein wie viele Zahlen sortiert werden sollen: ");
        int laenge = readInt();

        int[] suchfeld = new int[laenge];
        for (int i=0; i< laenge; i++) {
            suchfeld[i] = readInt();
        }
 
Wie geschrieben, die Methode readInt wirft einen Fehler (IOException) falls es ein Problem beim Einlesen gibt.

Also schnelle Lösung kannst du erstmal deine main Methode anpassen:
public static void main(String[] args) throws Exception {

Das ist natürlich nicht die beste Lösung. Das sicherste ist beim Einlesen der Zahl mit try...catch zu arbeiten um Fehler abzufangen. Was soll z.B. passieren falls der Benutzer Buchstaben eingibt? Dann tritt der Fehler NumberFormatException auf, der noch abgefangen werden muss. Ansonsten beendet sich das Programm einfach.
 
wenn du readInt() so benutzen willst mußt du die methode, wie main, static machen...

btw: klassennamen werden groß geschrieben :wink:
 
und du mußt, jedesmal, wenn du die intRead methode benutzt, das in nen try bauen oder main throws Exception machen, aber mach lieber try catch
 
aquanox hat gesagt.:
Tja, dazu kann ich nur sagen, dass sich da SUN nicht so viel Mühe gegeben hat. Die Ausgabe geht mit einer Methode, allerdings klappt das gleiche mit der Eingabe nicht.
Das was Du sagst ist nicht ganz vollständig. Wenn Du mit deiner Aussage meinst, dass man per
Code:
System.out.print
ganz einfach eine Ausgabe auf die Konsole zaubert so muss ich Dich belehren, dass man per
Code:
System.in.read
ganz einfach wieder was einlesen kann.

Falls Du was anderes meintest, dann bitte erkläre mir deine Aussage.
 
Wenn einem das zu kompliziert ist, benutzt man einfach JOptionPane;-)
Code:
import javax.swing.JOptionPane;

...
int i;
boolean b = false;
do {
    String z = JOptionPane.showInputDialog("Hack mal' ne Zahl rein");
    try{
        i = parseInt(z);
        b = true;
    } catch (NumberFormatException e) {
    }
} while (b == false);
 
@stephanschoeffel
Richtig 😀, da hier kein Objekt erstellt wird muss die Methode static sein damit das main darauf zugreifen kann. Im Prinzip wär es aber auch möglich eine extra Toolsklasse zu erstellen, die diese Methode bereitstellt (wieder static).

@sky80
Naja, es geht eher um das einfache einlesen. Das read gibt dir ein byte zurück, was aber nicht unbedingt gewünscht ist. Mit System.out.println kann man einfach einen String ausgeben, allerdings gibts für das System.in keine Methode um einfach einen String zu lesen, was man ja eigentlich eher braucht als byte.

@MPW
JOptionPane ist zwar eine nette Möglichkeit für grafische Anwendungen, allerdings sehe ich bei Textanwendungen von ab. Für das OptionPane müssen erstmal alle Swing Komponenten und Klassen geladen werden. Zu viel Arbeit um nur eine Eingabe von der Tastatur zu bekommen. Außerdem fällt das flach, wenn man z.B. ein Programm schreibt was auf einem entfernten Rechner über SSH verwaltet werden soll.

@Beni
Der Scanner ist neu, sieht nett aus aber ist keine reine Klasse zum Lesen vom stdin. Der Scanner sucht eher nach den Angaben so wie ich das verstanden habe. Dann lieber doch eine eigene Toolklasse.
 
aquanox hat gesagt.:
Naja, es geht eher um das einfache einlesen. Das read gibt dir ein byte zurück, was aber nicht unbedingt gewünscht ist. Mit System.out.println kann man einfach einen String ausgeben, allerdings gibts für das System.in keine Methode um einfach einen String zu lesen, was man ja eigentlich eher braucht als byte.

Wie liest man am besten Strings ein?
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben