Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Last revision Both sides next revision | ||
ffprog:ffprogjava2016:inputoutput [2016/09/09 09:24] Ivo Blöchliger [Input / Output] |
ffprog:ffprogjava2016:inputoutput [2016/09/09 20:50] Ivo Blöchliger [SOI - Aufgaben] |
||
---|---|---|---|
Line 1: | Line 1: | ||
{{backlinks> | {{backlinks> | ||
- | ==== Input / Output ==== | + | ===== Input / Output |
- | === Konsole === | + | ==== Konsole |
- | Output auf die Konsole: | + | === Output auf die Konsole |
<code java> | <code java> | ||
int a = 24; | int a = 24; | ||
Line 23: | Line 23: | ||
Mehr Infos auf https:// | Mehr Infos auf https:// | ||
- | Eingabe auf der Konsole: | + | === Eingabe auf der Konsole |
<code java> | <code java> | ||
// Eingabe. Scanner auf System.in (Konsolen-Eingabe) | // Eingabe. Scanner auf System.in (Konsolen-Eingabe) | ||
Line 35: | Line 35: | ||
System.out.format(" | 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: {{ : | ||
+ | |||
+ | ==== SOI - Aufgaben ==== | ||
+ | === CableCar === | ||
+ | Aufgabentext: | ||
+ | |||
+ | * Cable-Car Instanzen und Lösungen. Aufgabe 1 {{ : | ||
+ | * Cable-Car Aufgabe 2: {{ : | ||
+ | |||
+ | == Lösungsvorschlag Cablecar Aufgaben 1 und 2 == | ||
+ | <hidden Anzeigen> | ||
+ | <code java> | ||
+ | Path datei = Paths.get(" | ||
+ | // Speicher für die Ausgabe | ||
+ | ArrayList< | ||
+ | try (Scanner scanner = new Scanner(Files.newInputStream(datei))) { | ||
+ | int n = scanner.nextInt(); | ||
+ | for (int i=0; i<n; i++) { | ||
+ | int m = scanner.nextInt(); | ||
+ | boolean ok = true; | ||
+ | int a = scanner.nextInt(); | ||
+ | int b = scanner.nextInt(); | ||
+ | int d = b-a; // Differenz zwischen Masten 0 und 1 | ||
+ | for (int j=2; j<m; j++) { | ||
+ | int c = scanner.nextInt(); | ||
+ | if (c-b!=d) { // Mit letztem Masten vergleichen | ||
+ | ok = false; | ||
+ | } | ||
+ | b = c; // Aktueller Mast wird letzter Mast | ||
+ | } | ||
+ | lines.add(String.format(" | ||
+ | } | ||
+ | } | ||
+ | // Einzeiler, das eine Liste von Strings in eine Datei schreibt. | ||
+ | Files.write(Paths.get(" | ||
+ | </ | ||
+ | </ |