创建类文件的问题

时间:2013-12-04 07:11:49

标签: java class text methods java-7

我正在创建一个程序来读取和输出棒球统计数据。我正在尝试创建一个类文件来读取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  
公共双重传播()

返回最高和最低击球率之间的差异

public int goodPlayers()

返回平均值高于.300

的玩家数量

public String toString()

返回一个包含团队名称的字符串,后跟所有格式化为三位小名的击球平均值。

2 个答案:

答案 0 :(得分:1)

您尚未创建File对象,您所做的只是读取String文件名

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()) {
    ...
}

你正在做什么,你正在读取String fileName,例如“file.txt”

因此,扫描仪只是读取字符串“file.txt”,而不是文件

读取字符串后,没有任何内容。所以数组中的所有值都保持为0.这就是为什么你一直得到0.0的结果。

修改

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

}

答案 1 :(得分: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对象读取文件,您需要将File作为参数传递。你传递了一个字符串。您需要创建一个像上面一样的文件对象。而且,您可以使用hasNextDouble()代替input.hasNextLine(),因为您的文件中只有双值。

对于最后3种方法,

public double spread() - 您已经有了适用于最小和最大平均值的方法。您可以将每个变量(最小值和最大值)声明为全局变量,并在此方法中使用它们来计算点差。

public int goodPlayers() - 遍历数组并获取平均值高于.300的玩家数量,就像你在最小和最大平均值方法中迭代一样。

public String toString() - 您可以使用StringBuilder类并在字符串中附加所需的值。查看StringBUilder

上的文档
相关问题