Lernpfad:Würfelspiel in Java/Ein- und Ausgabe auf der Kommandozeile: Unterschied zwischen den Versionen

Aus Informatik-Box
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
 
(13 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
{{Navigation/{{ROOTPAGENAME}}}}
{{Navigation}}
== Ein- und Ausgabe auf der Kommandozeile ==


== Ein- und Ausgabe auf der Kommanozeile ==
Die Kommandozeile wird in Java über zwei Datenströme angesprochen, die in der immer verfügbaren {{Java API|java.lang.System}} Klasse enthalten sind.
 
Die Kommandozeile wird in Java über zwei Datenströme angesprochen. Diese können über die immer verfügbare <code>System</code> Klasse angesprochen werden.


; <code>System.out</code>
; <code>System.out</code>
: Die Ausgabe erfolgt über den <code>System.out</code> Datenstrom. Er bietet dieser ist ein Objekt der Klasse [https://docs.oracle.com/javase/8/docs/api/java/io/PrintStream.html PrintStream] und beherrscht dessen Methoden zur Ausgabe, wie <code>print(String)</code> und <code>println(String)</code>.
: Die Ausgabe erfolgt über den <code>System.out</code> Datenstrom. Dieser ist ein Objekt der Klasse {{Java API|java.io.PrintStream}} und beherrscht dessen Methoden zur Ausgabe, wie {{Java API|java.io.PrintStream|print-java.lang.String-|print(String)}} und {{Java API|java.io.PrintStream|println-java.lang.String-|println(String)}}.
; <code>System.in</code>
; <code>System.in</code>
: Um Date von der Kommandozeile einzulesen steht unter <code>System.in</code> ein Objekt der Klasse [https://docs.oracle.com/javase/8/docs/api/java/io/InputStream.html InputStream] zur Verfügung. Dieser kann Daten in Form von ''Bytes'' einlesen. Zur einfacheren Handhabung stellt Java die Hilfsklasse <code>java.util.Scanner</code> zur verfügung, mit der statt Bytes auch direkt ''Integer'' oder ''Strings'' eingelesen werden können.
: Um Daten von der Kommandozeile einzulesen, steht mit <code>System.in</code> ein Objekt der Klasse {{Java API|java.io.InputStream}} zur Verfügung. Dieser kann Daten in Form von ''Bytes'' einlesen. Zur einfacheren Handhabung stellt Java die Hilfsklasse {{Java API|java.util.Scanner}} zur Verfügung, mit der statt Bytes auch direkt ''Integer'' oder ''Strings'' vom Nutzer abgefragt werden können.


== Ausgaben auf der Kommandozeile ==
== Ausgaben auf der Kommandozeile ==


Ausgaben über den Ausgabestrom <code>System.out</code> können jederzeit in einem Javaprogramm gemacht werden.
Ausgaben über den Ausgabestrom {{Java API|java.lang.System|out|System.out}} können jederzeit in einem Javaprogramm gemacht werden.


<syntaxhighlight lang="java" line="1">
<syntaxhighlight lang="java" line="1">
Zeile 21: Zeile 20:
System.out.print("Hello, ");
System.out.print("Hello, ");
System.out.print("World!");
System.out.print("World!");
System.out.print("\n"); // Manueller Zeilenumbruch. Das Selbe wie System.out.println();
System.out.print("\n"); // Manueller Zeilenumbruch. Dasselbe wie System.out.println();
</syntaxhighlight>
</syntaxhighlight>


Für komplexere Ausgaben gibt es noch die Methode <code>printf(String, Object..)</code>, der man neben einem Text-Objekt
Für komplexere Ausgaben gibt es noch die Methode {{Java API|java.io.PrintStream|printf-java.lang.String-java.lang.Object...-|printf(String, Object...)}}, der du neben einem Text-Objekt
auch noch eine Reihe an weiteren Parametern übergibt, die dann im Text für vorgegebene Platzhalter eingesetzt werden. Dies
auch noch eine Reihe an weiteren Parametern übergibst, die dann im Text für vorgegebene Platzhalter eingesetzt werden. Dies
erlaubt wesentlich genauere Textformatierungen für Teste mit variablen Inhalten, als mit einfacher String-Verknüpfung durch  
erlaubt wesentlich genauere Textformatierungen für Texte mit variablen Inhalten, als es mit einfacher String-Verknüpfung durch <code>+</code> möglich ist.
<code>+</code>.


<syntaxhighlight lang="java" line="1">
<syntaxhighlight lang="java" line="1">
Zeile 33: Zeile 31:
// %s - Platzhalter für einen String
// %s - Platzhalter für einen String
// %d - Platzhalter für eine Zahl
// %d - Platzhalter für eine Zahl
//      %05d bedeutet, dass die Zahl so viele Nullen vorangestellt werden, dass sie insg. 5 Zeichen hat
//      %05d bedeutet, dass der Zahl so viele Nullen vorangestellt werden, dass sie insg. 5 Zeichen hat
System.out.printf("Hallo, %s! Hier ist eine Zahl: %05d", "Welt", 5); // Hallo, Welt! Hier ist eine Zahl: 00005
System.out.printf("Hallo, %s! Hier ist eine Zahl: %05d", "Welt", 5); // Hallo, Welt! Hier ist eine Zahl: 00005
</syntaxhighlight>
</syntaxhighlight>


Eine gute [http://www.hpg-speyer.de/pdf/unterrichtsfaecher/informatik/printf.pdf Übersicht der Ausgabemethoden und Platzhalter-Befehle gibt es in diesem PDF].
Eine kurze [http://www.hpg-speyer.de/pdf/unterrichtsfaecher/informatik/printf.pdf Übersicht der Ausgabemethoden und Platzhalter-Befehle gibt es in diesem PDF].
 
== Eingaben unter Verwendung der Klasse Scanner ==


== Eingaben unter Verwendung der Scanner-Klasse ==
Die Klasse {{Java API|java.util.Scanner}} kann wie folgt verwendet werden, um schnell Zahlen und Texte von der Kommandozeile einzulesen (nicht vergessen ganz oben die Klasse per <code>import java.util.Scanner</code>
zu importieren):


<syntaxhighlight lang="java" line="1">
<syntaxhighlight lang="java" line="1">
/**
* Zeigt dem Benutzer einen Text auf der Kommandozeile an und wartet auf die Eingabe
* einer Zahl.
* @return Die eingegebene Zahl
* @see java.util.Scanner#nextInt()
*/
public int zahlEinlesen( String pText ) {
public int zahlEinlesen( String pText ) {
Scanner eingabe = new Scanner(System.in);
Scanner eingabe = new Scanner(System.in);
Zeile 49: Zeile 56:
}
}


/**
* Zeigt dem Benutzer einen Text auf der Kommandozeile an und wartet auf die Eingabe
* eines Textes.
* @return Der eingegebene Text
* @see java.util.Scanner#nextLine()
*/
public String textEinlesen( String pText ) {
public String textEinlesen( String pText ) {
Scanner eingabe = new Scanner(System.in);
Scanner eingabe = new Scanner(System.in);

Aktuelle Version vom 8. Februar 2022, 13:22 Uhr

Ein- und Ausgabe auf der Kommandozeile

Die Kommandozeile wird in Java über zwei Datenströme angesprochen, die in der immer verfügbaren java.lang.System Klasse enthalten sind.

System.out
Die Ausgabe erfolgt über den System.out Datenstrom. Dieser ist ein Objekt der Klasse java.io.PrintStream und beherrscht dessen Methoden zur Ausgabe, wie print(String) und println(String).
System.in
Um Daten von der Kommandozeile einzulesen, steht mit System.in ein Objekt der Klasse java.io.InputStream zur Verfügung. Dieser kann Daten in Form von Bytes einlesen. Zur einfacheren Handhabung stellt Java die Hilfsklasse java.util.Scanner zur Verfügung, mit der statt Bytes auch direkt Integer oder Strings vom Nutzer abgefragt werden können.

Ausgaben auf der Kommandozeile

Ausgaben über den Ausgabestrom System.out können jederzeit in einem Javaprogramm gemacht werden.

// Ausgabe mit automatischem Zeilenumbruch am Ende
System.out.println("Hello, World!");

// Ausgabe ohne Zeilenumbruch am Ende
System.out.print("Hello, ");
System.out.print("World!");
System.out.print("\n"); // Manueller Zeilenumbruch. Dasselbe wie System.out.println();

Für komplexere Ausgaben gibt es noch die Methode printf(String, Object...), der du neben einem Text-Objekt auch noch eine Reihe an weiteren Parametern übergibst, die dann im Text für vorgegebene Platzhalter eingesetzt werden. Dies erlaubt wesentlich genauere Textformatierungen für Texte mit variablen Inhalten, als es mit einfacher String-Verknüpfung durch + möglich ist.

// String mit Platzhaltern für Daten:
// %s - Platzhalter für einen String
// %d - Platzhalter für eine Zahl
//      %05d bedeutet, dass der Zahl so viele Nullen vorangestellt werden, dass sie insg. 5 Zeichen hat
System.out.printf("Hallo, %s! Hier ist eine Zahl: %05d", "Welt", 5); // Hallo, Welt! Hier ist eine Zahl: 00005

Eine kurze Übersicht der Ausgabemethoden und Platzhalter-Befehle gibt es in diesem PDF.

Eingaben unter Verwendung der Klasse Scanner

Die Klasse java.util.Scanner kann wie folgt verwendet werden, um schnell Zahlen und Texte von der Kommandozeile einzulesen (nicht vergessen ganz oben die Klasse per import java.util.Scanner zu importieren):

/**
 * Zeigt dem Benutzer einen Text auf der Kommandozeile an und wartet auf die Eingabe
 * einer Zahl.
 * @return Die eingegebene Zahl
 * @see java.util.Scanner#nextInt()
 */
public int zahlEinlesen( String pText ) {
	Scanner eingabe = new Scanner(System.in);

	System.out.println(pText);
	return eingabe.nextInt();
}

/**
 * Zeigt dem Benutzer einen Text auf der Kommandozeile an und wartet auf die Eingabe
 * eines Textes.
 * @return Der eingegebene Text
 * @see java.util.Scanner#nextLine()
 */
public String textEinlesen( String pText ) {
	Scanner eingabe = new Scanner(System.in);

	System.out.println(pText);
	return eingabe.nextLine();
}