2017-12-07 6 views
1

부동 소수점 숫자로 가득 찬 텍스트 파일을 읽은 후 최대, 최소, 평균 및 표준 편차를 계산하기 위해 Java 프로그램을 작성하려고합니다. 보시다시피, 나는 최대, 최소, 평균을 계산했으나 표준 편차에 대해서는 혼란 스럽습니다. 어떻게 구현해야합니까?부동 소수점 파일의 표준 편차는 어떻게 계산합니까?

또한 프로그래밍에 익숙하지 않아서 상황이 올바르게 구성되지 않은 경우 미안합니다.

여기 내 코드입니다 :

/* 
* Create a Java program to read a file of floating point numbers and compute 
* the following statistics from the data file: 
* 
* 1. Maximum 
* 2. Minimum 
* 3. Arithmetic Average (Mean) 
* 4. Standard Deviation 
* 
* Do not assume anything about the large numbers in the file. They could be 
* positive or negative, and their magnitude could be extremely large or 
* extremely small. 
*/ 

import java.io.*; 
import java.util.Scanner; 

public class DataFile { 

public static void main(String[] args) { 
    // declare variables 
    double number, maximum, minimum, sum, mean, standardDeviation; 
    int count; 

    Scanner file = null; 

/* -------------------------------------------------------------------------- */ 
    try { 
     file = new Scanner(new File("RawData.txt")); 
    } 

    catch(FileNotFoundException e) { 
     System.out.print("Error; The program was terminated!"); 
     System.exit(1); 
    } 

/* -------------------------------------------------------------------------- */ 
    // initialize variables 
    maximum = file.nextDouble(); 
    minimum = maximum; 
    sum = 0; 
    count = 1; 

    while(file.hasNextDouble()) { 
     number = file.nextDouble(); 

     if(number > maximum) 
      maximum = number; 

     else if(number < minimum) 
      minimum = number; 

     sum += number; 
     count += 1; 

    } // end while loop 

    file.close(); 

/* -------------------------------------------------------------------------- */ 
    // mean calculation 
    mean = sum/count; 

    // standard deviation calculation 
    // ..... 

    // display statistics 
    System.out.println("Maximum ------------> " + maximum     ); 
    System.out.println("Minimum ------------> " + minimum     ); 
    System.out.println("Sum ----------------> " + sum      ); 
    System.out.println("Count --------------> " + count     ); 
    System.out.println("Mean ---------------> " + mean      ); 

} // end method main 

} // end class DataFile 
+0

당신이 계산이 무엇인지 아십니까 :

는 계산을 이해하기 쉬운 방법을이 웹 사이트를 참조하십시오? 아니면 코드 작성 방법을 묻는 것입니까? – EJP

+0

죄송합니다. 나는 그것을 코딩하는 방법을 궁금해. 나는 그것을 어렵게 만드는 시그마 표기법을 가지고 있습니다. – forumer444

+0

평균 제곱을 계산 한 다음 표준 편차에 대한 계산식이라고하는 것을 사용하십시오. – Bathsheba

답변

0

그것은 당신이 루프 전에 초기화됩니다 ArrayListnumber의 각을 넣을 수있는 while 루프. 파일의 끝에 도달하면 ArrayList의 값을 변경할 수 있습니다. 목록에 이미있는 값과 평균의 차이를 그 루프에 저장하여 그 차이를 제곱 할 필요가 있습니다. ArrayList 전체를 반복 한 후 ArrayList의 값을 합친 다음 count으로 나눈 값을 입력하면됩니다.

1

Przemysław MoskalI에 의해 제안 된 바와 같이, 나는 이와 같은 것이 당신이 무엇인지 알고 있습니다! 목록은 Java에서 매우 유용합니다. 이것은 매우 빨리 완료되었으므로 최종 계산에 만족하는지 확인하십시오! 해피 프로그래밍!

편집 됨 - Bathsheba의 제안으로 계산 된 수식이 사용되어 더 많은 메모리를 효율적으로 사용할 수있는 목록을 전혀 사용할 수 없습니다. https://www.mathsisfun.com/data/standard-deviation-formulas.html

// initialize variables 
maximum = file.nextDouble(); 
minimum = maximum; 
sum = 0; 
count = 1; 
double computationalSum = 0; 
double squareSum = 0; 

while(file.hasNextDouble()) { 
    number = file.nextDouble(); 

    squareSum += Math.pow(number, 2); 
    computationalSum += number; 

    if(number > maximum) 
     maximum = number; 

    else if(number < minimum) 
     minimum = number; 

    sum += number; 
    count += 1; 

} // end while loop 

file.close(); 

/* ------------------------------------------------------------------------*/ 
// mean calculation 
mean = sum/count; 
double stdDevSum = 0; 
double stdDevMean = 0; 
double stdDev = 0; 

double sumOfSquares = squareSum - ((Math.pow(computationalSum, 2)/(count-1))); 
double sSquared = sumOfSquares/(count-1); 
double otherStdDev = Math.sqrt(sSquared); 

// display statistics 
System.out.println("Maximum ------------> " + maximum     ); 
System.out.println("Minimum ------------> " + minimum     ); 
System.out.println("Sum ----------------> " + sum      ); 
System.out.println("Count --------------> " + count     ); 
System.out.println("Mean ---------------> " + mean      ); 
System.out.println("StdDev -------------> " + otherStdDev); 

} // end method main 
+0

더 자세히 설명 하시겠습니까? – Harry

+0

Google의 '표준 편차를위한 계산식'. 당신이 그것을 사용하면 upvote 것입니다. – Bathsheba