Студенческий опрос Запись в файл и чтение из файла - PullRequest
0 голосов
/ 21 сентября 2019

Новое в кодировании и попытке создать приложение, которое запрашивает у пользователя ответы на опрос и выводит каждый ответ в файл.Используйте Formatter для создания файла с именем numbers.txt.Каждый менеджер должен быть написан в формате метода.Затем измените программу, чтобы прочитать ответы на опрос в файле numbers.txt.Ответы должны быть прочитаны из файла с помощью сканера.Используйте метод nextInt для ввода по одному целому числу за раз из файла.Программа должна продолжать читать ответы, пока не достигнет конца файла.Результаты должны быть выведены в текстовый файл «output.txt».

Я пробовал несколько разных вещей, и я продолжаю получать утечку ресурсов.

public class StudentPoll {
  public static void main( String[] args ) {
  // student response array (more typically, input at runtime)
  int[] responses = { 1, 2, 5, 4, 3, 5, 2, 1, 3, 3, 1, 4, 3, 3, 3, 2, 3, 3, 2, 14 };
  int[] frequency = new int[ 6 ]; // array of frequency counters

  // for each answer, select responses element and use that value
  // as frequency index to determine element to increment
  for ( int answer = 0; answer < responses.length; answer++ ) {
    try {
      ++frequency[ responses[ answer ] ];
    } // end try
    catch ( ArrayIndexOutOfBoundsException e ) {
      System.out.println( e );
      System.out.printf( "   responses[%d] = %d\n\n", answer, responses[ answer ] );
    } // end catch
  } // end for

  System.out.printf( "%s%10s\n", "Rating", "Frequency" );

  // output each array element's value
  for ( int rating = 1; rating < frequency.length; rating++ )
    System.out.printf( "%6d%10d\n", rating, frequency[ rating ] );
  } // end main
} // end class StudentPoll

/*
java.lang.ArrayIndexOutOfBoundsException: 14
responses[19] = 14
Rating    Frequency
1         3
2         4
3         8
4         2
5         2
*/ 

Tried the below just playing around and get the resource leak

package studentPoll;

//Fig. 7.8: Numbers.java
//Writing data to a sequential text file with class Formatter.
import java.io.FileNotFoundException;     
import java.lang.SecurityException;       
import java.util.Formatter;               
import java.util.FormatterClosedException;
import java.util.NoSuchElementException;  
import java.util.Scanner;                 

public class Numbers {
public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    System.out.printf("%s%n%s%n? ", 
       "Enter 14 survey responses and enter each time:",
        "Enter end-of-file indicator to end input.");

   // open numbers.txt, output data to the file then close numbers.txt
   try (Formatter output = new Formatter("numbers.txt")) {
      while (input.hasNext()) { // loop until end-of-file indicator
         try {
            // output new record to file; assumes valid input
            output.format("%d %d %d %d %d %d %d %d %d %d %d %d %d %d", input.nextInt(),  
               input.next(), input.next(), input.nextDouble());
         } 
         catch (NoSuchElementException elementException) {
            System.err.println("Invalid input. Please try again.");
            input.nextLine(); // discard input so user can try again
         } 

         System.out.print("? ");
      }
   }
   catch (SecurityException | FileNotFoundException | 
      FormatterClosedException e) {
      e.printStackTrace();
      System.exit(1); // terminate the program
   }
} 
}

1 Ответ

0 голосов
/ 21 сентября 2019

Scanner input = new Scanner(System.in);

Предупреждение. Утечка ресурсов: «вход» никогда не закрывается

Просто вызовите input.close(); в конце вашей программы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...