【问题标题】:Scanning and printing on same file via Java通过 Java 扫描和打印同一文件
【发布时间】:2017-03-03 03:14:39
【问题描述】:

我想用这段代码做什么:

  1. 首先读取文本文件“occupancy”,该文件将被初始化为 10 个零。

  2. 将其分配给数组(guestsIn[])。

  3. 从键盘输入中获取新数据,并使用新值更新数组(guestsIn[])(有时所有值都会被覆盖,有时不会)

  4. 以 10 个 int 值的形式覆盖文件“occupancy”上的新 Array。

这是我运行此代码时收到的错误消息:

Exception in thread "main" java.util.NoSuchElementException

at java.util.Scanner.throwFor(Unknown Source)

at java.util.Scanner.next(Unknown Source)

at java.util.Scanner.nextInt(Unknown Source)

at java.util.Scanner.nextInt(Unknown Source)

at occupancyProg.main(occupancyProg.java:18)

最终,我尝试使用单个文本文件(仅包含 10 个 int 值)进行扫描和打印。 但我不知道错误信息告诉我什么,我不知道我的逻辑哪里有缺陷。

据我了解

    PrintStream diskWriter = new PrintStream(new File("occupancy"));

应该创建一个文件“占用”,因为在语句中使用了 new,所以我修复了代码以希望修复覆盖过程中可能出现的问题(通过删除现有文件并将其替换为新文件),但出现了相同的错误消息。 非常感谢您的帮助。

import java.util.Scanner;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintStream;

public class occupancyProg {

public static void main(String[] args) 
            throws FileNotFoundException {

    Scanner diskScanner = new Scanner(new File("occupancy"));
    Scanner keyboard = new Scanner(System.in);
    PrintStream diskWriter = new PrintStream(new File("occupancy"));

    int guestsIn[] = new int[10];
    int whichRoom, numGuests;
        for (int roomNum= 0; roomNum<10; roomNum++) {
            guestsIn[roomNum] = diskScanner.nextInt(); 
            }

        do {
            System.out.print("Room Number: ");
            whichRoom = keyboard.nextInt();


            System.out.print("Number of Guests: ");
            numGuests = keyboard.nextInt();

            guestsIn[whichRoom]=numGuests;

            System.out.print("Do another? Y/N");

        } while(keyboard.findWithinHorizon(".", 0).charAt(0) == 'Y');

        new File("occupancy").delete();

        for (int roomNum= 0; roomNum<10; roomNum++) {
        diskWriter.print("guestsIn[whichRoom] ");
         }
        keyboard.close();
        diskScanner.close();

}

}

【问题讨论】:

    标签: java arrays java.util.scanner printstream


    【解决方案1】:

    您似乎试图同时打开文件进行读取和写入。即使您在从 diskScanner 完成读取之前不写入 diskWriter,但只需构造 diskWriter 将打开文件以进行写入并截断文件。顺序应该是:

    • 打开磁盘扫描仪
    • 从 diskScanner 读取
    • 关闭 diskScanner
    • 打开磁盘写入器
    • 写入diskWriter
    • 关闭diskWriter

    不需要删除,因为打开相同的文件进行写入会替换它。

    public static void main(String[] args) throws FileNotFoundException {
        Scanner diskScanner = new Scanner(new File("occupancy"));
        Scanner keyboard = new Scanner(System.in);
    
        int guestsIn[] = new int[10];
        int whichRoom, numGuests;
        for (int roomNum= 0; roomNum<10; roomNum++) {
            guestsIn[roomNum] = diskScanner.nextInt();
        }
    
        do {
            System.out.print("Room Number: ");
            whichRoom = keyboard.nextInt();
    
            System.out.print("Number of Guests: ");
            numGuests = keyboard.nextInt();
    
            guestsIn[whichRoom]=numGuests;
    
            System.out.print("Do another? Y/N");
        } while(keyboard.findWithinHorizon(".", 0).charAt(0) == 'Y');
    
        keyboard.close();
        diskScanner.close();
    
        PrintStream diskWriter = new PrintStream(new File("occupancy"));
        for (int roomNum= 0; roomNum<10; roomNum++) {
            diskWriter.print(guestsIn[roomNum]);
            diskWriter.print(' ');
        }
        diskWriter.close();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-10
      • 2015-02-13
      • 2016-01-10
      • 2014-05-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多