Tech Archive Help

04 Java – Ein- und Ausgaben

Beim Programmieren sind Ausgaben sehr essenziell. Zum einen können bestimmte Werte auf der Konsole zur Überprüfung ausgegeben werden. Zum anderen können über die Ausgabe auf der Konsole Errors identifiziert werden, was wesentlich für die Fehlersuche und –behebung ist.

Eingaben wiederum ermöglichen uns die Interaktion mit Programmen und damit den Zugriff auf den weiteren Programmablauf – auch über die Konsole. Nahezu alles, was über elektronische Geräte getan wird, wird mit Eingaben realisiert – das Tippen auf der Tastatur, das Klicken mit der Maus oder sogar das Drücken von Tasten auf einem Controller so wie viele weitere Dinge.

Demnach sind natürlich nicht nur Ein- und Ausgaben über die Konsole möglich. Dafür werden jedoch Benutzeroberflächen benötigt. In Kapitel 2 – Datentypen gab es bereits einen kleinen Einblick zu den Konsolenausgaben.

Ausgaben

Um Ausgaben über die Konsole zu realisieren, gibt es mehrere Möglichkeiten.

System.out.print(); // Output without line break System.out.println(); // Output with line break System.out.printf(); // Formatted output without line break System.err.print(); // Output of an error without line break System.err.println(); // Output of an error with line break System.err.printf(); // Formatted output of an error without line breaks

Die print-Ausdrücke werden Methoden genannt. An diese können Werte übergeben werden. Diese Methoden sorgen dann dafür, dass die Werte auf der Konsole ausgegeben werden. Die printf()-Methode wird im nachfolgenden Kapitel 5 – Zeichenketten genauer betrachtet.

int i = 10; int j = 10; int k = i + k; System.out.println(k); // 20
System.out.println(5 + 11); // 16 (Line break) System.out.println(3 + 8); // 11
System.out.print(1); System.out.print(1); System.out.print(1); // 111 (No line breaks)
System.out.println("Hello World!"); // Hello World!

Eingaben

Es gibt mehrere Varianten Eingaben zu realisieren. Zwei davon werden hier vorgestellt. Dafür muss jedoch auf bestimmte Klassen und Objekte zurückgegriffen werden, die erst importiert werden müssen.

Klassen und Objekte werden in Kapitel 10 – Klassen und Kapitel 11 – Objekte genauer behandelt. Mehr zu Imports folgt in Kapitel 16 – Pakete & Imports.

BufferedReader

Eine mögliche Variante funktioniert über den BufferedReader in Verbindung mit dem InputStreamReader und einem InputStream-Objekt System.in.

Um nun über diesen Reader eine Eingabe von der Konsole einlesen zu können, muss folgendes geschrieben werden.

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

Um nun über diesen Reader eine Eingabe von der Konsole einlesen zu können, wird die readLine()-Methode verwendet.

reader.readLine();

Die readLine()-Methode liest einen String von der Konsole ein. Dieser kann nun in einer Variablen gespeichert und ausgegeben werden.

String input = reader.readLine(); System.out-println(input);

Der BufferedReader stellt selbst keine Methoden zur Verfügung, um Werte als primitive Datentypen einzulesen. Daher muss auf die Methoden der jeweiligen Wrapper-Klassen zurückgegriffen werden.

byte b = Byte.parseByte(input); short s = Short.parseShort(input); int i = Integer.parseInt(input); long l = Long.parseLong(input); float f = Float.parseFloat(input); double d = Double.parseDouble(input); boolean bool = Boolean.parseBoolean(input);

Jedoch besitzt der Reader eine Methode read(). Die Eingabe liegt jedoch als int vor, daher muss diese noch in ein char gecastet werden.

char c = (char) reader.read();

Scanner

Eine weitere Variante wird über die Scanner-Klasse umgesetzt.

Scanner scanner = new Scanner(System.in);

Der Scanner stellt zwar selbst Methoden für die Eingabe von primitiven Datentypen zur Verfügung, jedoch besitzt er keine Methode für die Eingabe oder die Umwandlung in ein char.

byte b = scanner.nextByte(input); short s = scanner.nextShort(input); int i = scanner.nextInt(input); long l = scanner.nextLong(input); float f = scanner.nextFloat(input); double d = scanner.nextDouble(input); boolean bool = scanner.nextBoolean(input);

Wenn ein char gefordert wird, muss die Eingabe erst mit der next() - oder der nextLine()-Methode erfolgen, welche als Input einen String erhält.

String input = scanner.next();
String input = scanner.nextLine();

Im Anschluss wird dann über die charAt()-Methode das erste Zeichen des Strings in ein char umgewandelt. charAt(0) bezieht sich auf den ersten Index eines Strings. Damit wird das erste Zeichen des Strings abgegriffen. Alle folgenden Zeichen werden ignoriert. Mehr zu Indizes folgt in Kapitel 8 – Arrays.

  • Mit next() wird alles bis zum ersten Leerzeichen eingelesen.

  • Mit nextLine() wird der komplette String eingelesen inklusive Leerzeichen.

System.out.print("Input 1: "); String s1 = scanner.next(); System.out.print("Input 2: "); String s2 = scanner.next(); System.out.print("Input 3: "); String s3 = scanner.next(); System.out.print("Input 4: "); String s4 = scanner.next(); System.out.println(); System.out.println(s1); System.out.println(s2); System.out.println(s3); System.out.println(s4);
Input 1: a b c d Input 2: Input 3: Input 4: a b c d

Um Ressourcen zu schonen, sollten der Scanner und/oder BufferedReader nach ihrer Verwendung wieder geschlossen werden.

scanner.close();
reader.close();

Farbliche Gestaltung (Ausblick)

Wir Menschen lieben es, uns durch schicke, benutzerfreundliche Oberflächen zu klicken. Kein Wunder, sie machen das Leben einfacher und sorgen dafür, dass wir uns nicht im digitalen Dschungel verirren. Doch wenn du dich in die Programmierung stürzt, wirst du irgendwann auf einen unverzichtbaren Begleiter treffen: die Konsole.

Viele sehen die Konsole als das graue, langweilige Arbeitszimmer der Programmierung – keine Fenster, keine Bilder, nur Text, Text, Text. Aber lass dich nicht täuschen! Die Konsole ist wie ein treuer Trainingspartner im Fitnessstudio der Programmierung: unaufgeregt, direkt und genau das, was du brauchst, um die Grundlagen zu meistern. Klar, sie ist nicht so bunt und aufregend wie die Benutzeroberflächen, die du vielleicht gewohnt bist, aber genau das ist ihre Stärke!

Doch keine Sorge, du musst nicht ganz auf Farben verzichten! Mit ein paar ANSI-Zeichencodes kann man der Konsole durchaus etwas Farbe und Leben einhauchen. So wird aus einem grauen, langweiligen Arbeitszimmer plötzlich eine farbenfrohe Wohlfühloase (mehr oder weniger). Wer also genug vom Standard-Look hat und sich nach etwas Abwechslung sehnt, könnte in dieser kleinen Designfreiheit den nötigen Ansporn finden, sich näher mit der Konsole anzufreunden.

Im nächsten Kapitel – Kapitel 5 – Zeichenketten – werde ich dir zeigen, wie du die Konsole mit ANSI Escape Codes aufpeppen kannst. Denn Programmieren muss ja nicht immer nur schwarz-weiß sein, oder?

Übung

Da wir jetzt alle nötigen Bausteine zusammen haben, um ein einfaches Programm mit Ein- und Ausgaben schreiben zu können, folgt nun eine kleine Übung.

public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.print("1st number: "); int x = sc.nextInt(); System.out.print("2nd number: "); int y = sc.nextInt(); System.out.println(x + y); System.out.println(x - y); System.out.println(x * y); System.out.println(x / y); sc.close(); }
Last modified: 19 August 2024