Differences
This shows you the differences between two versions of the page.
| Next revision | Previous revision | ||
| ffprog:ffprogjava2016:inputoutput [2016/09/09 07:17] – created Ivo Blöchliger | ffprog:ffprogjava2016:inputoutput [2016/09/11 19:05] (current) – [SOI - Aufgaben] Ivo Blöchliger | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | {{backlinks> | ||
| + | ===== Input / Output ===== | ||
| + | ==== Konsole ==== | ||
| + | === Output auf die Konsole === | ||
| + | <code java> | ||
| + | int a = 24; | ||
| + | int b = 5; | ||
| + | System.out.println(a); | ||
| + | // String zusammensetzen. Anfung muss String sein! | ||
| + | System.out.print(" | ||
| + | System.out.println(" | ||
| + | // Bequemer als Strings zusammensetzen | ||
| + | System.out.format(" | ||
| + | // Mehr Kontrolle über die Formatierung | ||
| + | System.out.format(" | ||
| + | // Double formatieren. | ||
| + | double c = 1.125; | ||
| + | System.out.format(" | ||
| + | | ||
| + | // (Viel) mehr Info zu format: https:// | ||
| + | </ | ||
| + | |||
| + | Mehr Infos auf https:// | ||
| + | |||
| + | === Eingabe auf der Konsole === | ||
| + | <code java> | ||
| + | // Eingabe. Scanner auf System.in (Konsolen-Eingabe) | ||
| + | Scanner scan = new Scanner(System.in); | ||
| + | System.out.print(" | ||
| + | // Nächste Zeile einlsesen | ||
| + | String name = scan.nextLine(); | ||
| + | System.out.print(" | ||
| + | // Achtung: Diese Methode produziert Fehler, wenn nicht eine Ganzzahl eingegeben wird. | ||
| + | int alter = scan.nextInt(); | ||
| + | System.out.format(" | ||
| + | </ | ||
| + | |||
| + | ==== Textdateien ==== | ||
| + | Hinweis: Operationen mit Dateien können Fehler verursachen (z.B. weil die Datei nicht (mehr) existiert). Diese Fehler können entweder abgefangen werden (mit try / catch) oder " | ||
| + | <code java> | ||
| + | public static void main(String[] args) throws IOException { | ||
| + | // .... | ||
| + | } | ||
| + | </ | ||
| + | Für die Manipulation von Datei sind einige Imports nötig. Netbeans schlägt diese Imports vor, manuelles Eingeben bzw. Abschreiben ist nicht nötig: | ||
| + | <code java> | ||
| + | import java.io.BufferedWriter; | ||
| + | import java.io.IOException; | ||
| + | import java.nio.file.Files; | ||
| + | import java.nio.file.Path; | ||
| + | import java.nio.file.Paths; | ||
| + | import java.util.Scanner; | ||
| + | </ | ||
| + | |||
| + | === Ausgabe in eine Datei === | ||
| + | Ohne absolute Pfadangabe landen die Dateien im aktuellen Projekt-Verzeichnis. | ||
| + | <code java> | ||
| + | // Ausgabe in Datei | ||
| + | Path datei = Paths.get(" | ||
| + | // Datei öffnen (wird am Ende des try-Blocks automatisch geschlossen) | ||
| + | try (BufferedWriter writer = Files.newBufferedWriter(datei)) { | ||
| + | // Daten schreiben. | ||
| + | writer.write(String.format(" | ||
| + | } | ||
| + | System.out.format(" | ||
| + | </ | ||
| + | |||
| + | === Lesen aus einer Datei === | ||
| + | <code java> | ||
| + | int x; | ||
| + | int y; | ||
| + | Path datei = Paths.get(" | ||
| + | // Datei öffnen und in einen Scanner einbinden | ||
| + | // Scanner und Datei werden am Ende vom try-Block automatisch geschlossen. | ||
| + | try (Scanner scanner = new Scanner(Files.newInputStream(datei))) { | ||
| + | x = scanner.nextInt(); | ||
| + | y = scanner.nextInt(); | ||
| + | } | ||
| + | System.out.format(" | ||
| + | </ | ||
| + | |||
| + | ===== Aufgaben ===== | ||
| + | ==== Addition ==== | ||
| + | Gegeben ist eine Text-Datei mit einer positiven natürlichen Zahl pro Zeile. | ||
| + | Die erste Zahl gibt an, wie viele Serien in der Datei gespeichert sind. | ||
| + | Für jede Serie gibt die erste Zahl an, wie viele Zahlen gespeichert sind. | ||
| + | |||
| + | Die Ausgabe (auf die Konsole) ist ebenfalls eine Zahl pro Zeile, die der Summe aller Zahlen einer Serie entspricht. | ||
| + | Beispiel: (2 Serien, die erste mit 3 Zahlen (1,2,3), die zweite mit 2 Zahlen (1,2)): | ||
| + | <code text> | ||
| + | 2 | ||
| + | 3 | ||
| + | 1 | ||
| + | 2 | ||
| + | 3 | ||
| + | 2 | ||
| + | 1 | ||
| + | 2 | ||
| + | </ | ||
| + | Das korrekte Resultat in diesem Fall wäre: | ||
| + | <code text> | ||
| + | 6 | ||
| + | 3 | ||
| + | </ | ||
| + | Beispieldateien: | ||
| + | * Input: {{ : | ||
| + | * Input: {{ : | ||
| + | |||