繁体   English   中英

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

[英]adding values to array reading from a file java

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

但是我面临的问题是它只保存了文件中包含的最后一个double,而array的其他enter为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

这是不正确的,因为我要打印文件的最后两个双打。 数组仅将最后两个双精度数存储在数组的最后一个位置。 我不明白我要去哪里错了。

我不知道该怎么办才能将双打存储在数组中并找到max和min ...预先感谢您的帮助,我们将不胜感激。

移动这些行:

    fatContentA=new double[numOfElementsOfDataSet];
    protienContentA=new double[numOfElementsOfDataSet];

在while循环之前:

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

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

我会避免使用两个数组(列表)来浪费内存,并且避免对这两个数组进行排序时使用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;
    }
    ...
}

然后,您无需使用数组或对这些数组进行任何排序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM