Einlese Abfrage zweier Variablen in einem Fenster

Inkognito

Mitglied
Ich studiere an der TU München im Nebenfach Informatik. Dort hat uns unser Professor extra eine Klasse namens
Code:
MiniJava
geschrieben, die das anfängliche Schreiben von
Code:
Java
- bzw.
Code:
MiniJava
-Code erleichtert. So gibt es beispielsweise
Code:
read();
und
Code:
write();
für das Einlesen und Ausgeben von Daten. Wie heißen die im richtigen
Code:
Java
?
Code:
System.out.print();
bzw.
Code:
System.out.println();
kenne ich beispielsweise für das
Code:
write();
, aber was steht für das
Code:
read();
?

Bisher haben wir auch gelernt, dass wenn wir beispielsweise für
Code:
x
und
Code:
y
zwei Werte einlesen will, man ein Programm der Form
Java:
int x, y;
x = read();
y = read();
in
Code:
MiniJava
schreibt. Das heißt beim Laufen des Programms öffnet sich zuerst ein Fenster, welches den Wert von
Code:
x
abfrägt, dann öffnet sich eines, welches den Wert von
Code:
y
abfrägt.
Wie muss man den Code umschreiben, damit sich ein Fenster öffnet, in das man beide Variablen auf einmal eingeben kann?
 

Anhänge

Zuletzt bearbeitet:
Also in dem Miniprogramm wird über eine JOptionPane (ein Nachrichtenfenster) eingelesen. Das zu erweitern dass man gleich zwei Werte eingeben kann halte ich nicht gerade für eine Anfängeraufgabe und bezweifle dass es so erwartet wird. Was spricht also dagegen zweimal ein Fenster anzeigen zu lassen?


Ich kenne für Konsolenprogramme eher die Scanner-Klasse, die direkt von der Konsole Eingaben liest:

Java:
Scanner scanner = new Scanner(System.in);
System.out.print("Bitte geben Sie Ihren Namen ein: ");
String name = scanner.next();
System.out.println("Hallo "+name");

Allgemein aber gilt natürlich dass es viele Wege zum Ziel gibt.
 
Es ist zumindest keine Anfängeraufgabe, wenn da irgendwie mehrere Eingabefelder erscheinen sollen. Du kannst aber natürlich zwei Zahlen wie folgt eingeben: [c]12;54[/c]. Dann einfach den String mit [c]split(";")[/c] splitten und jeden Eintrag im Array durch [c]Integer.valueOf(...)[/c] laufen lassen.
 
Also in dem Miniprogramm wird über eine JOptionPane (ein Nachrichtenfenster) eingelesen. Das zu erweitern dass man gleich zwei Werte eingeben kann halte ich nicht gerade für eine Anfängeraufgabe und bezweifle dass es so erwartet wird. Was spricht also dagegen zweimal ein Fenster anzeigen zu lassen?

Es wird nicht von uns erwartet, dass wir so etwas können. Ich interessiere mich nur sehr für die Lösung. 😉

Ich kenne für Konsolenprogramme eher die Scanner-Klasse, die direkt von der Konsole Eingaben liest:

Java:
Scanner scanner = new Scanner(System.in);
System.out.print("Bitte geben Sie Ihren Namen ein: ");
String name = scanner.next();
System.out.println("Hallo "+name");

Allgemein aber gilt natürlich dass es viele Wege zum Ziel gibt.

Da ich noch nicht so lange mit
Code:
Java
programmiere: Was genau macht dieses Programm? Könntest du vielleicht ein paar Kommentare und Erläuterungen dazu schreiben? Grob verstehe ich es schon, aber es enthält eben auch noch viele Befehle, die ich überhaupt nicht kenne.

Es ist zumindest keine Anfängeraufgabe, wenn da irgendwie mehrere Eingabefelder erscheinen sollen. Du kannst aber natürlich zwei Zahlen wie folgt eingeben: [c]12;54[/c]. Dann einfach den String mit [c]split(";")[/c] splitten und jeden Eintrag im Array durch [c]Integer.valueOf(...)[/c] laufen lassen.

Wie würde ein Beispiel hierfür aussehen?
 
Zuletzt bearbeitet:
Pi mal Daumen, ist aber bestimmt kein toller Quellcode.

Java:
public class MyOptionPane
{
    static int[] read()
    {
        JTextField x = new JTextField();
        JTextField y = new JTextField();
        Object[] dialog = {"x", x, "y", y};
        JOptionPane pane = new JOptionPane(dialog);
        pane.createDialog("x, y").setVisible(true);
        int array[] = new int[2];
        array[0] = Integer.valueOf(x.getText()); 
        array[1] = Integer.valueOf(y.getText());
        return array;
    }
    public static void main(String[] args)
    {
        int array[] = read();
        System.out.println("x: " + array[0] + " y: " + array[1]);
    }

}
 
Das euch vorgegebene read() ist (ohne den Source gelesen zu haben) bestimmt überschrieben.
 
Wie würde ein Beispiel hierfür aussehen?

Du brauchst zuerst eine Methode, welche statt eines int einen String zurückgibt. Falls diese nicht vorhanden ist, kannst du sie immer noch selbst schreiben (schau bei [c]read()[/c] ab).
Das wär dann irgendwie so:
Java:
String input = readString();
List<Integer> values = new ArrayList<Integer>();
for (String value : input.split("\\s*;\\s*")) {
    values.add(Integer.parseInt(value));
}
if (values.size() != 2) {
    // irgendeine Fehlermeldung werfen o.ä.
}
// ...
values.get(0); // x
values.get(1); // y
[c]\s*;\s*[/c] -> Entfernt auch noch allfällige Leerzeichen, Tabs etc.
Um [c]Integer.parseInt()[/c] kann man ggf. noch einen try-catch Block machen, um falsche Eingaben abzufangen.
 
Zuletzt bearbeitet:

Zurück
Oben