:PI-BLUEJ: Passwort-ProjektSynopsis:
How do I scanf, readln, etc. in Java? http://www.cafeaulait.org/javafaq.html
Lösungen: Passwort.java
Gegeben Klasse:
public class Passwort{
static String namen[] = {"Anna","Bert","Kalleman"};
static String pswd[] = {"f1c4e","123gaga","babe"};
public static boolean check(String n, String p){
// Ihr Programmcode
}
public static boolean aenderePswd(String n,String ap,String np){
// Ihr Programmcode
}
Entwickeln Sie die Methode check(n,p:Text):Boolean, mit Rückgabe true, wenn Name n und dazugehöriges Passwort p in den Feldern vorhanden ist, sonst Rückgabe false.
Entwickeln Sie die Methode aenderePswd(n,ap.np:Text):Boolean, zum Ändern des Passworts, dabei ist n der Name und ap,np altes und neues Passwort. Rückgabe true bei Erfolg, false sonst.
0. Anna f1c4e 1. Bert 123gaga 2. Kalleman babe |
Erstellen Sie eine Methode ausgeben(), die alle Namen nebst Passwörtern auf der Konsole ausgibt. |
1. Anna f1c4e 2. Bert 123gaga 3. Kalleman babe |
Erstellen Sie eine Methode ausgeben2(), die alle Namen nebst Passwörtern formatiert auf der Konsole ausgibt. Die Namen sollen 10 Zeichen breit dargestellt werden. Zeichen Sie ein Struktorgramm. Lösung.. |
In praktisch jeder Programmierumgebung gibt es Funktionen um Ausgaben zu formatieren. Hier soll die Java-Methode printf vorgestellt werden.
1. Anna f1c4e 2. Bert 123gaga 3. Kalleman babe |
public static void ausgebenPrintf(){
int i;
for(i=0;i<namen.length;i++){
System.out.printf("%2d. %-10s %s %n",i+1,namen[i],pswd[i]);
}
}
|

| Format-Spezifizierer | Wirkung |
|---|---|
| %2d | Ausgabe zweistellige Dezimalzahl, rechtsbündig |
| %-10s | Ausgabe als String 10 Zeichen Platz durch - linksbündig |
| %s | Ausgabe String ohne besondere Formatierung |
| %n | Ausgabe neue Zeile-Zeichen |

Galileo Computing :: Java ist auch eine Insel (8. Auflage) – 4.9 Formatieren von Ausgaben
printf, Formatstrings : http://java.sun.com/javase/6/docs/api/java/util/Formatter.html#syntax
1 1,19 2 2,38 |
Übung: Erstellen Sie Methode ausgebenTabelle() für formatierte Tabelle Nettopreis und Bruttopreis mit 19% Steuer. Verwenden Sie dazu die Format-Spezifizierer d und f: "%2d %4.2f %n" |
Daten in Dateien (Files) zu speichern geschieht praktisch immer nach folgendem Prinzip:
| aus <- öffneDatenstrom(filename) |
BufferedWriter aus = new BufferedWriter(new FileWriter(filename)); |
| aus.schreibe("Hallo hier Daten") |
aus.write("Hallo hier Daten");
|
| aus.schliesseDatei() |
aus.close(); |
Es können dabei Probleme auftreten -Dateipfad existiert nicht, Datei ist schon durch anderes Programm geöffnet usw.
In modernen Programmiersystemen werden Probleme in aufgerufenen Methoden durch Ausnahmefehlermeldungen (Exceptions) an die darüber liegenden Programmebenen gemeldet und dort bearbeitet. Galileo Computing -- Java ist auch eine Insel (8. Auflage) – 8 Exceptions
In Java wird hierzu das try-catch-Konstrukt verwendet.
public static void ausgebenDatei(String filename) { // try-catch nicht im Struktogramm darstellbar
int i;
try { // versuchen wir mal folgenden Code aus zu führen
BufferedWriter aus = new BufferedWriter(new FileWriter(filename));
aus.write(namen.length); // Anzahl der Daten speichern
for(i=0;i<namen.length;i++){
aus.write(namen[i]+"\t"+pswd[i]+"\n"); // schreibe Datensatz mit Tabulator getrennt
}
aus.close();
} catch (IOException e) { // falls ein IO-Ausnahmefehler auftritt tue folgendes
System.out.println("IOException: " + e); // gib den Fehler auf der Konsole aus
}
}
Die Anzahl der Datensätze wird hier mit abgespeichert, um beim späteren Lesen eine ausreichende Anzahl Listenplätze zu reservieren.
Implementieren Sie den Quelltext und testen Sie die Methode ausgebenDatei().
Hinweis: Sie müssen ganz oben im Quelltext die IO-Methoden importieren: import java.io.*;
Übung: Erstellen Sie Methode ausgebenTabelle(filename:Text) für formatierte Tabelle Nettopreis und Bruttopreis mit 19% Steuer.
Galileo Computing -- Java ist auch eine Insel (8. Auflage) – 14 Dateien und Datenströme
Galileo Computing -- Java ist auch eine Insel (8. Auflage) – 14.7 Datenströme filtern und verketten
Auch beim Lesen wird zunächst ein Datenstrom geöffnet. Es können einzelne Informationen oder auch ganze Zeilen gelesen werden.
| ein <- öffneDatenstrom(filename) |
BufferedReader ein = new BufferedReader(new FileReader(filename)); |
| anzahl <- ein.lese() |
anzahl = ein.read(); |
| zeile <- ein.leseZeile() |
zeile = ein.readLine() |
| ein.schliesseDatei() |
ein.close(); |
public static void leseDaten(String filename) { // try-catch nicht im Struktogramm darstellbar
int anzahl=0;
String zeile;
try { // versuchen wir mal folgenden Code aus zu fuehren
BufferedReader ein = new BufferedReader(new FileReader(filename)); // oeffne Datenstrom
anzahl = ein.read(); // Anzahl der Datensaetze lesen
System.out.printf("Anzahl der Datensätze: %d",anzahl);
while ((zeile = ein.readLine())!= null){ // solange Datensaetze vorhanden, lese Zeile
System.out.println(zeile); // gib Zeile aus
}
ein.close(); // schliesse Datenstrom
} catch (IOException e) { // falls ein IO-Ausnahmefehler auftritt tue folgendes
System.out.println("IOException: " + e); // gib den Fehler auf der Konsole aus
}
}
Am Ende der Datei (End Of File - EOF) gibt die readLine() Methode einen null - Verweis zurück.
Tokenizer.
Einlesen in die zwei Arrays
Entwickeln Sie Methode ..
| Format-Spezifizierer | Wirkung | Beispiel | Ausgabe |
|---|---|---|---|
| %2d | Ausgabe zweistellige Dezimalzahl, rechtsbündig |
printf("|%2d|%2d|%2d|%-2d|",1,10,100,1)
|
| 1|10|100|1 | |
| %-10s | Ausgabe als String 10 Zeichen Platz durch - linksbündig |
printf("|%5s|%-5s|","AB","BA")
|
| AB|BA | |
| %s | Ausgabe String ohne besondere Formatierung | ||
| %n | Ausgabe neue Zeile-Zeichen | ||
| %5.2f | Ausgabe FKZ mit Platz für 5 Zeichen, davon ein Komma und zwei Nachkommastellen, rechtsbündig |
printf("|%5.2f|%n|%5.2f|",1.0,10.0)
|
| 1,00| |10,00| |
public static void ausgebenDatei(String filename) {
try {
BufferedWriter aus = new BufferedWriter(new FileWriter(filename));
aus.write("Bla Bla");
aus.close();
} catch (IOException e) {
System.out.println("IOException: " + e);
}
}
public static void leseDaten(String filename) {
String zeile;
try {
BufferedReader ein = new BufferedReader(new FileReader(filename));
while ((zeile = ein.readLine())!= null){
System.out.println(zeile);
}
ein.close();
} catch (IOException e) {
System.out.println("IOException: " + e);
}
}
http://java.sun.com/j2se/1.5.0/docs/api/java/util/ArrayList.html