簡體   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