在 Java 中检测 EOF
在本教程中,我们将介绍如何在 Java 中使用 while
循环检测 EOF(End OF File
)。我们还将讨论开发一个程序,该程序会继续读取内容直到到达文件末尾。
从编程的角度来看,EOF 是开发人员用来连续读取输入的一种特殊类型,无论是来自文件还是键盘控制台。这个过程一直持续到没有更多数据要检索。
这里值得一提的是,文件中的数据可以随时修改或更改。因此,在该文件上应用哨兵控制循环实际上是不可能的。
因此,我们强烈建议你始终使用文件结束循环来减轻上述问题的潜在威胁。
在下面的代码示例中,我们使用键盘作为输入源。
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);
}
}
输出:
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)
我们首先声明和初始化扫描仪类的对象。之后,我声明了一些其他变量以在我们的代码中使用。
你可能已经注意到我们使用 console.hasNext()
作为循环迭代条件。我们已经知道控制台是我们的输入类 Scanner 的对象。
另一方面,hasNext()
是输入类 Scanner 中的预定义方法。此表达式仅在有整数输入时才返回 true。否则,它返回 false。
自行编译此代码并查看输出。从输出中可以很明显地看出,我们的程序会继续读取数据,直到我们提供了错误的输入类型。在这种情况下,该程序会引发输入不匹配异常。
文件作为输入源
在另一个示例中,我们使用文件结束控制的 while 循环来不断地从文件中读取数据。
假设我们要从文件 Students\_Result.txt
中读取所有数据。该文件包含学生姓名,后跟他们的考试成绩。
我们在这个程序中的目标是输出一个显示学生姓名、考试成绩和成绩的文件。
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();
}
}
输出:
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
在你的系统上编译并运行这个程序,看看会发生什么。
相关文章
Java 中的类字段和实例字段
发布时间:2023/11/28 浏览次数:97 分类:Java
-
在本文中,你将学习一些 Java 术语,它们是局部变量、输入参数、类字段和实例字段。我们还将讨论 Java 中实例字段的一些属性。
Java 中的类文件编辑器
发布时间:2023/11/28 浏览次数:192 分类:Java
-
本文展示了如何使用 Java 类文件来编辑类文件。在本文中,我们将讨论 Java 类文件编辑器,这是一个用 Java 创建的工具,用于编辑 Java 编译的类。我们可以在创建 Java 类后对其进行反编译并查看
Java 中的_JAVA_OPTIONS 环境变量
发布时间:2023/11/28 浏览次数:166 分类:Java
-
在本文中,我们将讨论 Java 选项和 _JAVA_OPTIONS 环境变量,它的后续 JAVA_TOOL_OPTIONS 和 JDK_JAVA_OPTIONS。
如何在 Java 中清除控制台
发布时间:2023/11/28 浏览次数:125 分类:Java
-
它展示了在 Java 中清理控制台屏幕的两种方法。在本教程中,我们将看一下在 Java 中清理控制台屏幕的两种方法。我们将通过实例来学习如何在运行时执行 Java 清屏命令。
如何在 Java 中从控制台获取输入
发布时间:2023/11/28 浏览次数:163 分类:Java
-
本教程展示了 Scanner 类中包含的读取控制台输入的各种功能。在本教程中,我们将查看 Java 中的 Scanner 类,并学习如何使用该类从控制台读取输入。Scanner 类来自于 Java 包 java.util.Scanner。
Java 中的 console.log
发布时间:2023/11/28 浏览次数:174 分类:Java
-
本文介绍 Java 中的 console.log。本教程介绍 Java 中的 console.log() 函数以及如何在 Java 中将日志显示到控制台。console.log() 是 JavaScript 的一个函数,用于向浏览器控制台显示日志消息。
Java 更改日期格式
发布时间:2023/11/28 浏览次数:166 分类:Java
-
本文介绍如何在 Java 中更改日期格式 有多种选项可用于将日期字符串转换为日期格式。下面提到的方法可以带来所需的结果。让我们从下面的代码块中了解各种方式。
Java 中 YYYY-MM-DD 格式的日历日期
发布时间:2023/11/28 浏览次数:157 分类:Java
-
本文讨论了我们可以在 Java 中将日历日期转换为 YYYY-MM-DD 格式的各种方法。Java Date 封装了当前时间和日期。日期类在两个构造函数的帮助下做到这一点 - Date() 和 Date(long millisec) 构造函数。
在 Java 中实现最小最大堆
发布时间:2023/11/28 浏览次数:50 分类:Java
-
本文介绍如何在 Java 中实现最小最大堆 本文将使用 PriorityQueue 类实现一个最大堆和一个最小堆。我们还将演示从堆中插入和删除元素。