Kann jemand mir sagen, wie ich meinen code mit diese zwei Dateien testen, ob den code die Dateirn liest oder nicht? Ich weiß nicht wie es auf Netbeans oder Bluej geht?
Ihnen liegen zwei Textdateien vor, die eine beliebige Anzahl an Zahlen im Wertebereich
von 0..255 enthält. Die einzelnen Zahlen sind durch Leerzeichen (oder Zeilenumbrüche)
voneinander getrennt.
Implementieren Sie eine von java.io.InputStream abgeleitete Klasse mit Namen
NumberInputStream, welche eine java.io.Reader-Instanz nutzt, um diese Datei
einzulesen.
Die read()-Methode Ihrer NumberInputStream-Klasse soll die in der Textdatei als ASCIIZiffern enthaltenen Zahlen kodiert als Integer zurückgeben. Sie müssen dazu die
read()-Methode natürlich überschreiben.
Erstellen Sie zusätzlich eine NumberToLargeException-Klasse, die von der
read()-Methode Ihrer NumberInputStream-Klasse geworfen wird, falls im Eingabestrom
eine Zahl größer 255 enthalten ist.
zahlen_1.txt
zahlen_2.txt
Meinen geschriebenen Code:
Ihnen liegen zwei Textdateien vor, die eine beliebige Anzahl an Zahlen im Wertebereich
von 0..255 enthält. Die einzelnen Zahlen sind durch Leerzeichen (oder Zeilenumbrüche)
voneinander getrennt.
Implementieren Sie eine von java.io.InputStream abgeleitete Klasse mit Namen
NumberInputStream, welche eine java.io.Reader-Instanz nutzt, um diese Datei
einzulesen.
Die read()-Methode Ihrer NumberInputStream-Klasse soll die in der Textdatei als ASCIIZiffern enthaltenen Zahlen kodiert als Integer zurückgeben. Sie müssen dazu die
read()-Methode natürlich überschreiben.
Erstellen Sie zusätzlich eine NumberToLargeException-Klasse, die von der
read()-Methode Ihrer NumberInputStream-Klasse geworfen wird, falls im Eingabestrom
eine Zahl größer 255 enthalten ist.
zahlen_1.txt
zahlen_2.txt
Meinen geschriebenen Code:
Java:
import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;
// Eine Klasse, die von InputStream abgeleitet wird, um eine Datei mit Zahlen im Bereich von 0..255 einzulesen
public class NumberInputStream extends InputStream {
// Eine Reader-Instanz, die zum Lesen der Zahlen aus der Datei verwendet wird
private Reader reader;
// Ein Konstruktor, der einen Reader als Parameter erhält
public NumberInputStream(Reader reader) {
this.reader = reader;
}
// Überschreiben der read()-Methode von InputStream
@Override
public int read() throws IOException {
// Eine Variable, die den gelesenen Integer-Wert speichert
int value = 0;
// Liest das nächste Zeichen aus dem Reader
int currentChar = reader.read();
// Solange das gelesene Zeichen eine Ziffer ist und nicht ein Leerzeichen oder ein Zeilenumbruch ist
while (currentChar >= 0 && currentChar != ' ' && currentChar != '\n' && currentChar != '\r') {
// Wenn das Zeichen keine Ziffer ist
if (currentChar < '0' || currentChar > '9') {
// Wirft eine Ausnahme, da das Zeichen keine Ziffer ist
throw new NumberFormatException("keine Ziffer");
}
// Konvertiert die gelesenen Ziffern in eine Zahl
while (currentChar >= '0' && currentChar <= '9') { // Schleife, die solange läuft, wie das nächste gelesene Zeichen eine Ziffer ist
value *= 10; // multipliziert "value" mit 10, um Platz für die nächste Ziffer zu schaffen
value += currentChar - '0'; // konvertiert die nächste Ziffer von ASCII zu einer Ganzzahl und addiert sie zu "value"
currentChar = reader.read(); // liest das nächste Zeichen
}
// Wenn die gelesene Zahl größer als 255 ist, wirft eine Ausnahme
if (value > 255) {
throw new NumberToLargeException("Zahl größer als 255");
}
}
// Wenn das letzte gelesene Zeichen ein Zeilenumbruch ist, liest das nächste Zeichen
if (currentChar == '\n' ) {
currentChar = reader.read();
}
// Gibt die gelesene Zahl als Integer zurück
if (value >= 0) {
return value;
} else {
return -1;
}
}
// Eine benutzerdefinierte Ausnahme, die geworfen wird, wenn eine Zahl größer als 255 gefunden wird
public static class NumberToLargeException extends IOException {
public NumberToLargeException(String message) {
super(message);
}
}
}
Anhänge
Zuletzt bearbeitet: