Написание программы, которая читает файл после запроса имени файла - PullRequest
0 голосов
/ 18 октября 2018

Я сейчас пытаюсь выучить ввод / вывод, и мне действительно тяжело с этим.В настоящее время я застрял в одном конкретном упражнении из моей учебной книги, где мне нужно написать программу, которая читает файл, содержащий два столбца чисел с плавающей запятой, запрашивает у пользователя имя файла, а затем печатает среднее значение для каждого столбца.,

Делать все это в основном проще всего, или я должен распределить его по методам?Это то, что я до сих пор придумал:

/**
 * @param args
 */
public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    System.out.println("Enter the File Name: ");
    String fileNameReading = in.next();
    in.close();

    try {
        getAverage(fileNameReading);
    } catch (IOException e) {
        e.printStackTrace();
    }

}

    private static void getAverage(String fileNameReading1) throws IOException {

    double firstColumnSum = 0;  //Skapar summa för den första kolumnen
    double secondColumnSum = 0; //Skapar summa för den andra kolumen
    int allRows = 0; //Skapar summa för antalet rader

    while (in.hasNextLine()) {
        String[] row = in.nextLine().split("\\s+"); //Skapar arrayen rows 
        firstColumnSum += Double.parseDouble(row[0]);
        secondColumnSum += Double.parseDouble(row[1]);
        allRows++;
    }

    double row1 = firstColumnSum / allRows;
    double row2 = secondColumnSum / allRows;

    in.close();

     System.out.printf("Medelvärdet på den första kolumnen är: %.2f\n",row1);
     System.out.printf("Medelvärdet på den andra kolumnen är: %.2f\n", row2);

    }

Проблема на данный момент заключается в том, что сканер не работает, так как он работает не так, как основной, как мне заставить это работать?

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

Поместите эти строки в getAverage(), просто перед циклом while, чтобы запустить новый Scanner для чтения содержимого файла:

    File file = new File(fileNameReading1);

    Scanner in = null;

    try {
        in = new Scanner(file);
    } catch (FileNotFoundException e) {
        System.out.println("File not found");
        e.printStackTrace();
        return;
    }

Редактировать , эта строка:

in = new Scanner(file);

Создает новый сканер, который выдает значения, отсканированные из указанного файла.

(из Scanner.java)Таким образом, объект in Scanner будет использоваться для извлечения строк вашего файла.

0 голосов
/ 18 октября 2018

Это должно работать

package org.test; 
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;

public class readFile {

public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    System.out.println("Enter the File Name: ");
    String fileNameReading = in.next();
    in.close();

    try {
        getAverage(fileNameReading);
    } catch (IOException e) {
        e.printStackTrace();
    }

}


private static void getAverage(String fileNameReading) throws IOException {
    FileInputStream fis;
    try {
        fis = new FileInputStream(fileNameReading);
         InputStreamReader input = new InputStreamReader(fis);
            BufferedReader br = new BufferedReader(input);
            String data;
            double avg = 0;
             String[] doublearray = null;


            while ((data = br.readLine()) != null) {
                doublearray = data.split(" "); // assuming the file contains only one line like x y , x and y are doubles
            }
            if(doublearray!= null && doublearray.length>0){
            avg = (Double.parseDouble(doublearray[0])+Double.parseDouble(doublearray[1]))/2;
            }

            System.out.println("The Average of Double values is : "+avg);


    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
   }
}
...