通过Java

时间:2017-03-03 03:14:39

标签: java arrays java.util.scanner printstream

我正在尝试使用此代码:

  1. 首先阅读文本文件" occupancy&#34 ;,将初始化为 10个零。

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

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

  4. 覆盖文件上的新数组"占用"以10个int值的形式。

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

    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();
    
    }
    
    }
    

1 个答案:

答案 0 :(得分:1)

您似乎正在尝试同时打开文件进行读写。即使您在完成从diskScanner读取之后也没有写入diskWriter,只需构建diskWriter就会打开文件进行写入并截断文件。订单应该是:

  • 打开diskScanner
  • 从diskScanner中读取
  • 关闭diskScanner
  • open diskWriter
  • 写入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();
}