EOF erkennen in Java
In diesem Tutorial stellen wir vor, wie man EOF (End OF File
) mit einer while
-Schleife in Java erkennt. Wir werden auch die Entwicklung eines Programms besprechen, das den Inhalt liest, bis das Ende der Datei erreicht ist.
Aus Sicht der Programmierung ist EOF ein spezialisierter Typ, den Entwickler verwenden, um kontinuierlich Eingaben zu lesen, sei es aus der Datei oder der Tastaturkonsole. Dieser Vorgang wird fortgesetzt, bis keine Daten mehr abzurufen sind.
Es ist hier erwähnenswert, dass Daten in einer Datei jederzeit modifiziert oder geändert werden können. Es ist also praktisch unmöglich, eine Sentinel-gesteuerte Schleife über diese Datei anzuwenden.
Aus diesem Grund empfehlen wir dringend, dass Sie immer eine End-of-File-Schleife verwenden, um die potenzielle Bedrohung durch das oben erwähnte Problem zu mindern.
Im folgenden Codebeispiel verwenden wir die Tastatur als Eingabequelle.
package sampleProject;
import java.util.*;
import java.util.Scanner;
public class Codesample {
static Scanner console = new Scanner(System.in);
public static void main(String[] args) {
int total_ages = 0;
int age;
while (console.hasNext()) {
age = console.nextInt();
total_ages = total_ages + age;
}
System.out.println("Total ages are:" + total\_ages);
}
}
Ausgabe:
99
90
88
Ko
Exception in thread "main" java.util.InputMismatchException
at java.base/java.util.Scanner.throwFor(Scanner.java:939)
at java.base/java.util.Scanner.next(Scanner.java:1594)
at java.base/java.util.Scanner.nextInt(Scanner.java:2258)
at java.base/java.util.Scanner.nextInt(Scanner.java:2212)
at sampleProject/sampleProject.Codesample.main(Codesample.java:15)
Wir beginnen damit, dass wir das Objekt der Scannerklasse that deklarieren und initialisieren. Danach habe ich einige andere Variablen zur Verwendung in unserem Code deklariert.
Sie haben vielleicht bemerkt, dass wir console.hasNext()
als Iterationsbedingung der Schleife verwenden. Wir wissen bereits, dass console das Objekt unserer Eingabeklasse scanner ist.
Andererseits ist hasNext()
eine vordefinierte Methode in der Eingabeklasse Scanner. Dieser Ausdruck gibt nur dann true
zurück, wenn eine ganzzahlige Eingabe vorhanden ist. Andernfalls wird false zurückgegeben.
Kompilieren Sie diesen Code selbst und sehen Sie sich die Ausgabe an. Aus der Ausgabe ist ziemlich offensichtlich, dass unser Programm die Daten so lange liest, bis wir den falschen Eingabetyp bereitstellen. In diesem Fall löst dieses Programm eine Input Mismatch-Ausnahme aus.
Datei als Eingabequelle
In einem anderen Beispiel verwenden wir eine Dateiende-gesteuerte while
Schleife, um kontinuierlich Daten aus der Datei zu lesen.
Nehmen wir an, wir wollen alle Daten aus der Datei Students\_Result.txt
lesen. Die Datei enthält die Namen der Schüler, gefolgt von ihren Testergebnissen.
Unser Ziel in diesem Programm ist es, eine Datei auszugeben, die die Namen, Testergebnisse und Noten der Schüler anzeigt.
package sampleProject;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.PrintWriter;
import java.util.*;
import java.util.Scanner;
public class Codesample {
static Scanner console = new Scanner(System.in);
public static void main(String[] args) throws FileNotFoundException {
// declare file name as an input object
Scanner inputFile = **new** Scanner(**new** FileReader("Students\_Result.txt"));
// declare the output object that stores data we want to display
PrintWriter outputFile = **new** PrintWriter("Students\_Record.txt");
// Declare variable to store first name and last name
String firstName, lastName;
// declare variable to store score
double score;
// declare variable to store student's grad
char grade = ' ';
// declare and initialize counter variable
int counter = 0;
// continue reading data from the file until the loop reaches end of file
while (inputFile.hasNext()) {
// read first name from the provided file
firstName = inputFile.next();
// read last name from the file
lastName = inputFile.next();
// read score of the students from the filee
score = inputFile.nextDouble();
// increment counter variable
counter++;
// To evaluate grade of the students, we are using the switch statemet
switch ((int) score / 10) {
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
grade = 'F';
break;
case 6:
grade = 'D';
break;
case 7:
grade = 'C';
break;
case 8:
grade = 'B';
break;
case 9:
case 10:
grade = 'A';
break;
default:
outputFile.println("Your score does not meet our criteria");
}
// Display retrieved data using the outputFile object we have declared earlier
outputFile.println(firstName + " " + lastName + " " + score + " " + grade);
}
// If no data is found in the output file
if (counter == 0)
outputFile.println("There is not data in your input file");
// close output file upon reading all the data from it.
outputFile.close();
}
}
Ausgabe:
Waleed Ahmed 89.5 B
Bob Alice 90.0 A
Khan Arshad 100.0 A
Waqas Jameed 65.5 D
Danish Taimoor 70.5 C
Muaz Junaid 80.5 B
John Harris 88.0 B
Kompilieren Sie dieses Programm und führen Sie es auf Ihrem System aus, um zu sehen, was passiert.