# Eingabeaufforderung über die Konsole



## uwe75-1 (29. März 2012)

Hallo,

ich habe folgendes Problem:
ich möchte in der Konsole zur Eingabe eines Wertes auffordern, allerdings soll immer ein Eingabewert standardmäßig angezeigt / vorgeschlagen werden, der individuell geändert werden kann oder auch durch eingabe von Enter einfach bestätugt und der Wert zur weiteren Verarbeitung verwendet wird.

Leider habe ich über die Suchmaschine keine Code-Beispiele gefunden, in welchen eine Eingabeaufforderung mit Vorgabewert demonstriert wird.

Es wäre echt toll, wenn mir jemand weiter helfen könnte-

Vielen Dank

Uwe


----------



## Akeshihiro (29. März 2012)

Also dieser Code macht bei mir genau das, was du willst.


```
package test.console;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class ConsoleTest {
	public static void main(String[] args) {
		BufferedReader in = null;
		try {
			in = new BufferedReader(new InputStreamReader(System.in));
			String def = "foobar";
			System.out.print("Geben Sie Ihren Namen ein (" + def + "): ");
			String res = in.readLine();
			res = res == null || res.isEmpty() ? def : res;

			System.out.println("Ihr Name ist: " + res);
		} catch(Exception e) {
			e.printStackTrace();
		} finally {
			if(in != null) {
				try {
					in.close();
				} catch(IOException e) {
					e.printStackTrace();
				}
			}
		}
	}
}
```


----------



## uwe75-1 (30. März 2012)

Hallo Akeshihiro,

vielen Dank für Deine Hilfe, aber ist leider nicht ganz, was ich suche. Ich suche einen Programm-schnipsel, bei dem im Eingabefeld (an der Stelle wo der Cusor steht, um eine Eingabe tätigen zu können - genau dort soll ein Wert vorgegeben werden, wobei ich die Möglichkeit habe, diesen zu ändern und deren Eintrag in eine Variable durch "Enter drücken" gespeichert wird.

Weißt Du vielleicht, wie man das bewerkstelligt?

Danke nochmal und noch einen Schönen Abend

Uwe


----------



## Akeshihiro (30. März 2012)

Ähm... Aber genau das macht der Code doch auch. Er bietet einen Vorgabewert an, man kann aber auch was anderes eingeben. Wird nix eingegeben, wird der Vorgabewert genommen. Wenn man was anderes eingegeben hat, dann kann man den neuen Wert als Vorgabewert ablegen und fertig. Gut, das speichern des neuen Wertes macht mein Beispielcode nicht, er gibt die Eingabe direkt aus. Aber einen Wert für die weitere Verarbeitung zu speichern ist ja nun auch keine Kunst.

Oder wir reden grad an einander völlig vorbei, das kann auch sein.

EDIT:
Hab den Code mal ein wenig modifiziert. Jetzt läuft das Ganze in einer Schleife bis man diese abbricht, man kann also seinen Namen so lange eingeben, wie man lustig ist und der neue Name wird immer zum neuen Vorgabewert. Ich habe mir aber auch erlaubt das mit try-resource zu machen, man braucht also dafür jetzt min. Java7.


```
package test.console;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class ConsoleTest {
	public static void main(String[] args) {
		String def = "foobar";
		try(BufferedReader in = new BufferedReader(new InputStreamReader(System.in))) {
			while(true) {
				System.out.print("Geben Sie Ihren Namen ein (" + def + "): ");
				String res = in.readLine();
				res = res == null || res.isEmpty() ? def : res;
				if(res.equalsIgnoreCase("exit")) break;

				System.out.println("Ihr Name ist: " + res);

				def = res;
			}
		} catch(IOException e) {
			//			e.printStackTrace();
			System.out.println("Beim Einlesen trat ein Problem auf!");
		}
	}
}
```


----------



## uwe75-1 (30. März 2012)

Entschuldige bitte, ja hast recht  - habe mir das trotzdem anders vorgestellt.
Ich habe ewig lange Werte einzugeben, die sich immer nur minimal von einander unterscheiden. Deshalb war meine Überlegung, einen Wert an der Eingabestelle / Cursor vorzugeben, dort die kleinen Änderungen zu machen ohne den kompletten Wert selbst eintippen zu müssen und dann durch "Enter" den Wert in der Variable zu speichern. Ich will also das Eintippen der fast identischen Werte jedesmal einsparen.

Tut mir Leid, wenn wir wohl doch ein wenig aneinander vorbei geredet haben


----------



## Akeshihiro (31. März 2012)

Ja, das geht schon in eine völlig andere Richtung. Du willst auf eine History zugreifen, quasi wie wenn man auf der Kommandozeile nach oben drückt, um den letzten Befehl zu holen. Aber in dem Augenblick, in dem dein Programm läuft, hat das Programm den Fokus, das heißt dein Programm müsste sowas implementieren. Da das Programm aber nur mit Werten arbeitet und nicht auf Pfeiltasten reagiert, wird das wohl nicht gehen, außer du schreibst für deine Anwendung quasi deine eigene Shell.


----------

