2016-10-08 3 views
-4

루프에서 표준 편차를 계산합니까? 저는 표준 편차를 계산하는 공식을 알고 있습니다. 계산을 위해 사용자 입력을받는 방법을 알고 싶습니다. 나는 프로그래밍에 익숙하지 않으므로 모든 것을 설명하십시오. 또한 표준 편차 공식을 쓰려는 시도에 대한 유감스럽게도 SD를 더 잘 이해하기 위해 노력한 것이 아닙니다. 먼저 코드자바에서 표준 편차를 계산하십시오.

import java.util.Scanner; 

public class readFromKeyboard { 
    public static void main(String[] args) { 
    Scanner input = new Scanner(System.in); 
    String inStr = input.next(); 
    int n; 
    int i; 
    int count = 0; 
    int min = Integer.MAX_VALUE; 
    int max = Integer.MIN_VALUE; 
    double average=0; 
    int sum; 
    double deviation = 0; 

    while (!inStr.equals("EOL")) { 
     count++; 
     n = Integer.parseInt(inStr); 
     min = Math.min(min, n); 
     max = Math.max(max, n); 
     System.out.printf("%d ", n); 
     inStr = input.next(); 
     average += n; 
     // really bad attempt here 
     deviation = math.pow(n/average,2) ++/mean sqrt(); 
    } 
    average = average/count; 
    System.out.println("\n The average of these numbers is " + average); 
    System.out.printf("The list has %d numbers\n", count); 
    System.out.printf("The minimum of the list is %d\n", min); 
    System.out.printf("The maximum of the list is %d\n", max); 

    input.close(); 
    } 
} 
+0

[mcve] 및 [ask]를 참조하십시오. – Mat

+0

Welcome to Stack Overflow! 좋은 질문을하고 좋은 대답을 얻으려면 [SO Question Checklist] (http://meta.stackoverflow.com/questions/260648/stack-overflow-question-checklist)를 검토하십시오. –

답변

0

몇 가지 문제 :

먼저 요소의 숫자로 나누어에만 다음 어큐뮬레이터로 사용하고 있기 때문에 average의 사용은 매우 혼란이다. 훨씬 좋은 스타일은 합계를 계산하기 위해 별도의 누산기 변수를 사용한 다음 for 루프 외부에서 평균을 계산하는 것입니다.

평균이 계산되면 다시 값을 반복 할 수 있으며 각 숫자에 대해 평균과 평균의 차이의 제곱에 의해 증가하는 누적 기 변수를 다음과 같이 줄 수 있습니다.

varianceSum += Math.pow(num - average, 2);

는 일단 모든 번호는 (아마도 0으로 나누기를 방지하기 위해 검사와 함께) 분산을 얻기 위해 count에 의해 varianceSum를 분할하고, 표준 편차를 찾기 위해 Math.sqrt()를 사용할 수 요약된다.

사용자로부터 입력하는 경우 모든 번호에 대해 input.nextInt() 번을 반복해서 호출해야합니다. 사용자가 처음에 입력 수를 입력 한 다음 for 루프에서 반복 입력하거나 스캐너의 hasNext() 메소드를 사용하여 입력 끝까지 읽을 수 있습니다.

+0

OP의 질문은 사용자 입력에 관한 것입니다. 이 대답은이 문제를 해결하지 못합니다. –

+0

실제로, 이제 – Michael

0

사용자 입력을 반복적으로 받으려면 루프 내에 input.next();으로 전화해야합니다.

레코드의 경우 여기에서 정수를 다루기 때문에 input.next(); 대신 in.nextInt()을 사용할 수 있습니다. deviation의 계산이 명확하지 않습니다.