将值添加到从文件java读取数组

时间:2014-06-21 13:16:15

标签: java arrays

我有一个程序类,它读取输入文件并显示它。 但我试图将它包含的双打放在两个数组中,然后我试图找到这些数组的最大值和最小值。

但我遇到的问题是它只保存文件中包含的最后一个双精度数组,其他数组的输入数为0.0。(不应该是这种情况)。

所以这里是我的代码;

import java.util.Arrays;
import java.util.Scanner;
import java.util.StringTokenizer;

public class DataRow2 {
static double[] fatContentA;
static double[] protienContentA;



 public static void starter() {
     Scanner in=new Scanner(System.in);
    int numOfClusters=in.nextInt();

    int numOfElementsOfDataSet=in.nextInt();
    int numOfVariables=in.nextInt();

    System.out.printf("%d\t %d\t %d\t",numOfClusters,numOfElementsOfDataSet,numOfVariables);


    String line=in.nextLine();
    String ignore=in.nextLine();
    StringTokenizer ignoreLine = new StringTokenizer(ignore);
     while (ignoreLine.hasMoreTokens()) {
        System.out.println(ignoreLine.nextToken());
     }
    System.out.println(ignoreLine);
    int counter=1;
    while(in.hasNext()){

        String readLine=in.nextLine();
        Scanner parseInformation=new Scanner(readLine);
        String nameOfMammal=in.next();
        double fatContent=in.nextDouble();
        double protienContent=in.nextDouble();

        fatContentA=new double[numOfElementsOfDataSet];
        protienContentA=new double[numOfElementsOfDataSet];
        fatContentA[counter]=fatContent;
        protienContentA[counter]=protienContent;

    System.out.printf("%s\t%f\t%f\t\n",nameOfMammal,fatContent,protienContent);
        counter+=1;
    }

    Arrays.sort(fatContentA);
    int length=fatContentA.length;
    //System.out.println(fatContentA[length/2]);
     double max_fat = fatContentA[length-1];
     double min_fat = fatContentA[0];

     Arrays.sort(protienContentA);
     double max_Protien = protienContentA[protienContentA.length - 1];
     double min_Protien = protienContentA[0];

     System.out.println("The maximum fat in this file was"+max_fat);
     System.out.println("The minimum fat in this file was"+min_fat);
     System.out.println("The maximum Protien in this file was"+max_Protien);
     System.out.println("The maximum Protien in this file was"+min_Protien);

}



}

这是我想要阅读的文件;

7
25
2
Mammal  fat_content(%)  protein_content(%)
Bison   7.9 5.9
Guinea_pig  3.9 8.1
Dolphin 14.0    10.4
Donkey  1.4 1.7
Goat    4.1 3.4
Deer    19.7    9.2
Dog 8.3 9.5
Yak 6.7 5.3
Camel   3.4 3.5
Cat 10.9    11.1
Rabbit  13.1    7.1
Llama   3.2 3.9
Human   43.9    7.4
Mule    1.8 2.0
Elephant    5.0 4.0
Horse   1.3 2.1
Rat 12.6    12.3
Reindeer    20.3    10.4
Sheep   6.4 5.6
Pig         5.1 6.6
Fox         5.9 7.4
Whale   42.3    10.9
Polar_bear  31.0    10.2
Zebra   4.8 3.0
Seal    53.2    11.2

我得到的输出是它正在读取的所有文件数据:

The maximum fat in this file was53.2
The minimum fat in this file was0.0
The maximum Protien in this file was11.2
The maximum Protien in this file was0.0

这不是真的,因为我正在打印文件的最后两个双打。 这些数组只在最后一个数组位置存储最后两个双精度数。 我不明白我哪里出错了。

我不知道还应该做些什么来将双打存储在数组中并找到最大值和最小值... 在此先感谢您的帮助,我们将非常感谢。

2 个答案:

答案 0 :(得分:1)

移动以下行:

    fatContentA=new double[numOfElementsOfDataSet];
    protienContentA=new double[numOfElementsOfDataSet];
在while循环之前

    fatContentA=new double[numOfElementsOfDataSet];
    protienContentA=new double[numOfElementsOfDataSet];
    while (in.hasNext()) {

您的代码不起作用,因为while循环中的每次迭代都会将数组fatContentAprotienContentA重新初始化为空数组。

答案 1 :(得分:0)

我会避免在使用两个数组(列表)和CPU功能对这两个数组进行排序时花费内存 - 尤其是当您的代码不需要时。

相反,我会跟踪fatContent和proteinContent的最小值和最大值,如下所示:

double minFat = Double.POSITIVE_INFINITY;
double maxFat = Double.NEGATIVE_INFINITY;

double minProtein  = Double.POSITIVE_INFINITY;
double maxProtein = Double.NEGATIVE_INFINITY;

while(in.hasNext()){

    String nameOfMammal=in.next();
    double fatContent=in.nextDouble();
    double protienContent=in.nextDouble();

    if (fatContent < minFat) {
        minFat = fatContent;
    } else if (fatContent > maxFat) {
        maxFat = fatContent;
    }
    if (protienContent < minProtein) {
        minProtein = protienContent;
    } else if (protienContent > maxProtein) {
        maxProtein = protienContent;
    }
    ...
}

然后您不需要在这些数组上使用数组或任何排序。

相关问题