ffprog:ffprogjava2016:inputoutput

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
ffprog:ffprogjava2016:inputoutput [2016/09/09 09:06] – [Textdateien] Ivo Blöchligerffprog: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); // Ausgabe mit Zeilenumbruch
 +        // String zusammensetzen. Anfung muss String sein!
 +        System.out.print("b = "+b);  // Ohne Zeilenumbruch.
 +        System.out.println(" und a = "+a);
 +        // Bequemer als Strings zusammensetzen
 +        System.out.format("a=%d, b=%d,  a/b=%d   (double)a/b=%f\n", a,b,a/b,(double)a/b);
 +        // Mehr Kontrolle über die Formatierung
 +        System.out.format("%5d\n*%4d\n-----\n%05d\n=====\n",a,b,a*b);
 +        // Double formatieren.
 +        double c = 1.125;
 +        System.out.format("->%.2f<-\n->%4.2f<-\n->%010.5f<-\n->%.5f<-\n", c,c,c,c);
 +        
 +        // (Viel) mehr Info zu format: https://docs.oracle.com/javase/8/docs/api/java/util/Formatter.html
 +</code>
 +
 +Mehr Infos auf https://docs.oracle.com/javase/8/docs/api/java/util/Formatter.html
 +
 +=== Eingabe auf der Konsole ===
 +<code java>
 +        // Eingabe. Scanner auf System.in (Konsolen-Eingabe)
 +        Scanner scan = new Scanner(System.in);
 +        System.out.print("Ihr Name bitte: ");
 +        // Nächste Zeile einlsesen
 +        String name = scan.nextLine();
 +        System.out.print("Ihr Alter: ");
 +        // Achtung: Diese Methode produziert Fehler, wenn nicht eine Ganzzahl eingegeben wird.
 +        int alter = scan.nextInt();
 +        System.out.format("%s ist %d Jahre alt.\n", name,alter);
 +</code>
 +
 +==== 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 "ignoriert" werden, indem man die main-Methode wie folgt erweitert:
 +<code java>
 +public static void main(String[] args) throws IOException {
 +   // ....
 +}
 +</code>
 +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;
 +</code>
 +
 +=== Ausgabe in eine Datei ===
 +Ohne absolute Pfadangabe landen die Dateien im aktuellen Projekt-Verzeichnis.
 +<code java>
 +        // Ausgabe in Datei
 +        Path datei = Paths.get("ausgabe.txt");
 +        // Datei öffnen (wird am Ende des try-Blocks automatisch geschlossen)
 +        try (BufferedWriter writer = Files.newBufferedWriter(datei)) {
 +            // Daten schreiben.
 +            writer.write(String.format("%d%n%d%n",a,b));
 +        }
 +        System.out.format("Habe die Zahlen %d und %d in die Datei %s geschrieben.%n", a,b,datei.toRealPath());
 +</code>
 +
 +=== Lesen aus einer Datei ===
 +<code java>
 +        int x;
 +        int y;
 +        Path datei = Paths.get("ausgabe.txt");
 +        // 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("Aus Datei: %d und %d%n", x,y);
 +</code>
 +
 +===== 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
 +</code>
 +Das korrekte Resultat in diesem Fall wäre:
 +<code text>
 +6
 +3
 +</code>
 +Beispieldateien:
 +  * Input: {{ :ffprog:ffprogjava2016:other.txt |other.txt}}. Korrekter Output: {{ :ffprog:ffprogjava2016:other-sol.txt |other-sol.txt}}
 +  * Input: {{ :ffprog:ffprogjava2016:simple.txt |simple.txt}}. Korrekter Output: {{ :ffprog:ffprogjava2016:simple-lsg.txt |simple-lsg.txt}}
 +