2014-06-21 2 views
0

입력 파일을 읽고 표시하는 프로그램 클래스가 있습니다. 하지만 두 개의 배열에 포함 된 double을 넣으려고합니다. 그리고 나서이 배열의 최대 값과 최소값을 찾으려고합니다.파일에서 배열 읽기에 값 추가 java

하지만 내가 직면하고있는 문제는 파일의 마지막 두 줄을 저장한다는 것입니다. 배열의 다른 엔터 리는 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); 

} 



} 

그리고이 파일을 읽으려고합니다. 내가 파일의 마지막 두 배로 인쇄 밖으로이기 때문에 사실이 아니다

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 

:

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 

내가 얻을 출력은 읽고 된 모든 파일 데이터입니다. 배열은 마지막 두 개의 double을 배열의 마지막 위치에만 저장합니다. 내가 어디로 잘못 가고 있는지 이해하지 못한다.

배열에서 복식을 저장하고 최대 값과 최소값을 찾으려면 어떻게해야합니까? 도움을 위해 미리 감사 드리며 매우 감사하겠습니다. while 루프 전에

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

:

답변

1
는이 라인을 이동

while 루프의 각 반복이 빈 배열로 배열 fatContentAprotienContentA를 다시 초기화하기 때문에

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

귀하의 코드가 작동하지 않습니다 .

+0

감사합니다 ..... 내 문제를 해결했습니다 ... – BlackSwan

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; 
    } 
    ... 
} 

그런 다음 배열이나 이러한 배열에 정렬을 사용할 필요가 없습니다.

+1

내 질문에 대한 답변을 많이 주셔서 감사합니다 ..... 나는 분명히 당신이 제안한 것을 시도 할 것입니다 .... 다시 한번 감사드립니다. .. – BlackSwan