{{backlinks>.}} ===== Input / Output ===== ==== Konsole ==== === Output auf die Konsole === 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 Mehr Infos auf https://docs.oracle.com/javase/8/docs/api/java/util/Formatter.html === Eingabe auf der Konsole === // 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); ==== 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: 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: 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. // 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()); === Lesen aus einer Datei === 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); ===== 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)): 2 3 1 2 3 2 1 2 Das korrekte Resultat in diesem Fall wäre: 6 3 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}}