迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Java >

在 Java 中检测 EOF

作者:迹忆客 最近更新:2023/11/28 浏览次数:

在本教程中,我们将介绍如何在 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

在你的系统上编译并运行这个程序,看看会发生什么。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

如何在 Java 中延迟几秒钟的时间

发布时间:2023/12/17 浏览次数:217 分类:Java

本篇文章主要介绍如何在 Java 中制造程序延迟。本教程介绍了如何在 Java 中制造程序延时,并列举了一些示例代码来了解它。

如何在 Java 中把 Hashmap 转换为 JSON 对象

发布时间:2023/12/17 浏览次数:187 分类:Java

它描述了允许我们将哈希图转换为简单的 JSON 对象的方法。本文介绍了在 Java 中把 Hashmap 转换为 JSON 对象的方法。我们将看到关于创建一个 hashmap,然后将其转换为 JSON 对象的详细例子。

如何在 Java 中按值排序 Map

发布时间:2023/12/17 浏览次数:171 分类:Java

本文介绍了如何在 Java 中按值对 Map 进行排序。本教程介绍了如何在 Java 中按值对 Map 进行排序,并列出了一些示例代码来理解它。

如何在 Java 中打印 HashMap

发布时间:2023/12/17 浏览次数:192 分类:Java

本帖介绍了如何在 Java 中打印 HashMap。本教程介绍了如何在 Java 中打印 HashMap 元素,还列举了一些示例代码来理解这个主题。

在 Java 中更新 Hashmap 的值

发布时间:2023/12/17 浏览次数:146 分类:Java

本文介绍了如何在 Java 中更新 HashMap 中的一个值。本文介绍了如何在 Java 中使用 HashMap 类中包含的两个方法-put() 和 replace() 更新 HashMap 中的值。

Java 中的 hashmap 和 map 之间的区别

发布时间:2023/12/17 浏览次数:79 分类:Java

本文介绍了 Java 中的 hashmap 和 map 接口之间的区别。本教程介绍了 Java 中 Map 和 HashMap 之间的主要区别。在 Java 中,Map 是用于以键值对存储数据的接口,

在 Java 中获取用户主目录

发布时间:2023/12/17 浏览次数:218 分类:Java

这篇文章向你展示了如何在 Java 中获取用户主目录。本教程介绍了如何在 Java 中获取用户主目录,并列出了一些示例代码以指导你完成该主题。

Java 中 size 和 length 的区别

发布时间:2023/12/17 浏览次数:179 分类:Java

这篇文章教你如何知道 Java 中大小和长度之间的区别。本教程介绍了 Java 中大小和长度之间的区别。我们还列出了一些示例代码以帮助你理解该主题。

Java 中的互斥锁

发布时间:2023/12/17 浏览次数:111 分类:Java

了解有关 Java 中互斥锁的一切,在计算机科学领域,互斥或互斥被称为并发控制的属性。每台计算机都使用称为线程的最小程序指令序列。有一次,计算机在一个线程上工作。为了更好地理解,

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便