2013-12-04 2 views
1

Я создаю программу для чтения и вывода статистики бейсбола. Я пытаюсь создать файл класса, который читает txt-файл, который состоит из имени команды, а затем 20 средних значений.Проблема с созданием файла класса

Мне нужна помощь в том, что код, который я использовал, правильно читает текстовый файл и как создавать последние 3 метода.

код до сих пор:

import java.util.Scanner; 

public class BaseballStats { 

    private String fileName; 
    private String teamName; 
    private double[] battingAverage = new double[20]; 

    public BaseballStats(String fileName) { 
     this.fileName = fileName; 
     boolean firstLine = true; 
     Scanner input = new Scanner(fileName); 
     while (input.hasNextLine()) { 
      String line = input.nextLine(); 
      if (firstLine) { 
       setTeamName(line); 
       firstLine = false; 
       continue; 
      } 
      int i = 0; 
      while (input.hasNext()) { 
       battingAverage[i] = input.nextDouble(); 
       i++; 
      } 
     } 
    } 

    public String getTeamName() { 
     return teamName; 
    } 

    public void setTeamName(String newTeamName) { 
     teamName = newTeamName; 
    } 

    public double findMaxAverage() { 
     double max = battingAverage[0]; 
     for (int i = 1; i < battingAverage.length; i++) { 
      if (battingAverage[i] > max) 
       max = battingAverage[i]; 
     } 
     return max; 
    } 

    public double findMinAverage() { 
     double min = battingAverage[0]; 
     for (int i = 1; i < battingAverage.length; i++) { 
      if (battingAverage[i] < min) 
       min = battingAverage[i]; 
     } 
     return min; 
    } 
} 

Txt файл:

Tars 
0.592 
0.427 
0.194 
0.445 
0.127 
0.483 
0.352 
0.190 
0.335 
0.207 
0.116 
0.387 
0.243 
0.225 
0.401 
0.382 
0.556 
0.319 
0.475 
0.279 

общественность двойного распространение()

возвращается разница между самым высоким и самым низким ватином средних

общественностью Int goodPlayers()

возвращает количество игроков со средним выше, чем 0,300

Струнного ToString общественности()

возвращает строку, содержащее имя команды, за которой следует всему ватин среднее отформатированного до трех знаков после запятой.

+0

кто-то отредактировал ваш код. Примите это пожалуйста. – Mdhar9e

+0

никто не редактировал, они просто удалили тег? – user2985542

+0

Можете ли вы предоставить образец файла, который вы пытаетесь прочитать. – Adarsh

ответ

1

Вы не создали объект File, все, что вы делаете, чтение строки файла

this.fileName = fileName; 
boolean firstLine = true; 

try { 
    File file = new File(fileName);  // you need to create a File object 
    Scanner input = new Scanner(file); // then pass that File to the scanner 
catch(FileNotFoundException ex) { 
    ex.printStackTrace()) 
} 

while (input.hasNextLine()) { 
    ... 
} 

С, что вы делаете, вы читаете Строка файла, например, «file.txt "

Так что сканер только чтение, чтение String„file.txt“, а не файл

после строки читается, не осталось ничего. Таким образом, все значения в массиве остаются равными 0. Вот почему вы получаете 0.0 для результата.

Edit:

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

public class BaseBallStats { 

    private String fileName; 
    private String teamName; 
    private double[] battingAverage = new double[20]; 

    public BaseBallStats(String fileName) { 
     this.fileName = fileName; 
     boolean firstLine = true; 
     Scanner input = null; 
     try { 
      File file = new File(fileName);  // you need to create a File object 
      input = new Scanner(file); // then pass that File to the scanner 
     } catch (FileNotFoundException ex) { 
      ex.printStackTrace(); 
     } 

     while (input.hasNextLine()) { 
      String line = input.nextLine(); 
      if (firstLine) { 
       setTeamName(line); 
       firstLine = false; 
      } 
      int i = 0; 
      while (input.hasNext()) { 
       battingAverage[i] = input.nextDouble(); 
       i++; 
      } 
     } 
    } 

    public String getTeamName() { 
     return teamName; 
    } 

    public void setTeamName(String newTeamName) { 
     teamName = newTeamName; 
    } 

    public double findMaxAverage() { 
     double max = battingAverage[0]; 
     for (int i = 1; i < battingAverage.length; i++) { 
      if (battingAverage[i] > max) { 
       max = battingAverage[i]; 
      } 
     } 
     return max; 
    } 

    public double findMinAverage() { 
     double min = battingAverage[0]; 
     for (int i = 1; i < battingAverage.length; i++) { 
      if (battingAverage[i] < min) { 
       min = battingAverage[i]; 
      } 
     } 
     return min; 
    } 

    public static void main(String[] args) { 
     BaseBallStats stats = new BaseBallStats("file.txt"); 
     System.out.println(stats.findMaxAverage()); 
     System.out.println(stats.findMinAverage()); 
    } 

} 
+0

. Я положил это и получил 19 найденных ошибок: Ошибка: «попробуйте» без 'catch', 'finally' или объявления ресурса F – user2985542

+0

См. Мое редактирование. Он работает для максимального среднего бита не для мин. Возможно, вам придется исправить логику, чтобы найти min –

+0

ok, я вставляю ваше редактирование и компилируется без ошибок, но когда я его запускаю: java.io.FileNotFoundException: tars.txt (система не может найти указанный файл) – user2985542

1
public BaseballStats (String fileName) throws FileNotFoundException { 
    this.fileName = fileName; 
    File f = new File (fileName); 
    Scanner input = new Scanner (f); 
    String line = input.nextLine(); 
    setTeamName (line); 
    int j = 0; 
    while (input.hasNextDouble()) { 
     battingAverage[j] = input.nextDouble(); 
     j++; 
    } 
} 

Вы можете использовать вышеупомянутый конструктор вместо тех, которые вы использовали. Чтобы объект Scanner считывал файл, вам необходимо передать файл в качестве параметра. Вы проходили нитку. Вам нужно создать такой файловый объект, как указано выше. Кроме того, вместо input.hasNextLine() вы можете использовать hasNextDouble(), поскольку у вас есть только два значения в вашем файле.

За последние 3 методов,

общественности двойного распространения() - У вас уже есть методы в месте для мин и макс средних значений. Вы можете объявить две переменные для каждого из них (min и max) в качестве глобальных переменных и использовать их в этом методе для вычисления спреда.

public int goodPlayers() - Итерировать по массиву и подсчитать количество игроков со средним значением выше .300, точно так же, как вы выполнили повторение в средних и средних средних методах.

public String toString() - Вы можете использовать класс StringBuilder и добавить значения, необходимые в строке.Проверьте документацию по адресу StringBUilder

Смежные вопросы