什么是使用final块关闭我所在的文件的正确方法:event.dat。如果您能帮助我理解这一点,我将不胜感激。我实际上花了4个小时来回移动,玩代码并在线搜索答案,但无济于事。没有这部分,代码可以很好地工作,但是我需要知道它如何在将来的实例中工作。谢谢你,有一个美好的一天!

我对此块有疑问:

          finally{
              fstream.close();
          }


位于以下代码中:

    String answer;
    String letter;
    String inType = "";
    double inAmount = 0;
    double amount;

    description();
    GironEventClass newInput = new GironEventClass();
    try{
        File infile = new File("event.dat");
        Scanner fstream = new Scanner(infile);

        System.out.println("File Contents ");

        while(fstream.hasNext())
        {
            inAmount = fstream.nextInt();
            inType = fstream.next();

            try{
                newInput.donations(inType, inAmount);

            }
            catch(IllegalArgumentException a){
                System.out.println("Just caught an illegal argument exception. ");
            }
           finally{
                   fstream.close();
          }
        }

        System.out.println("Total Sales: " + newInput.getSale());
        System.out.println("Donations: " + newInput.getDonated());
        System.out.println("Expenses: " + newInput.getExpenses());



    }

    catch (FileNotFoundException e){
        System.out.println("\nEvent.dat could not be opened. ");
    }

    do{
        System.out.print("Are there any more items to add that were not in the text file? (Type 'Y' or 'N')");
        answer = keyboard.next();
        if (("Y".equals(answer)) || ("y".equals(answer)))
        {
            letter = inLetter();
            amount = inAmount();

            newInput.donations(letter, amount);
        }

    }while (("Y".equals(answer)) || ("y".equals(answer)));

    newInput.display();
}

public static String inLetter(){
    Scanner keyboard = new Scanner(System.in);
    String result;
    String resultTwo;

    System.out.println("T = Tiket Sales");
    System.out.println("D = Donations");
    System.out.println("E = Expenses");
    System.out.print("Please input an identifier ");
    result = keyboard.nextLine();
    resultTwo = result.toUpperCase();

    return resultTwo;
}

public static double inAmount(){
    Scanner keyboard = new Scanner(System.in);
    double result;

    System.out.println("Please input an amount ");
    result = keyboard.nextInt();

    if(result <= 0.0){
        System.out.print("Please input a positive and non-zero amount ");
        result = keyboard.nextInt();
    }

    return result;
}

public static void description(){
    System.out.println("The program will ask you what amount is being spent on what.");
    System.out.println("    ex: expenses, ticket sales, and profts.");
    System.out.println("This program will help determine whether the event generated or lost money.");
}

最佳答案

这是扫描仪的工作方式:

while scanner has object
   read them ( one object per method's call)
when objects are done
   close the reader.


您的问题是,当while结论成立时,您将使用close函数。所以你应该把它放在while循环之外

08-05 07:36
查看更多