2017-12-07 3 views
-3

입니다.하지만 입력 한 숫자에 관계없이 값의 평균은 0.0입니다. 올바른 평균값을 출력하려면 어떻게합니까?ArrayList에 입력 된 숫자의 평균을 구하고 싶지만 평균을 계산하는 것은 0.0

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

public class Calculation { 
    static Toolkit tools = new Toolkit(); 
    public static void main(String [] args) { 
     double average = 0.0; 
     double sum = 0; 
     int i =0; 
     int num = 0; 
     int nElements = 0; 
     Scanner console = new Scanner(System.in); 

     ArrayList<Integer> value = new ArrayList<Integer>(); 
     System.out.println("Enter value: "); 
     num = console.nextInt(); 
     while(num != 0) { 
      value.add(new Integer(num)); 
     } 

     for(i = 0; i < value.size(); i++) { 
      sum += value.size(); 
     } 
     average = sum/value.size(); 
     System.out.println("Number of values read: " + value.size()); 
     System.out.println("Values sum: " + sum + "Values average: " + 
          average); 
     System.exit(0); 
    } 
} 
+1

'while (num! = 0) {value.add (new Integer (num)); }'내부에 들어가면 num을 변경하지 않아 조건이 거짓이 될 수 없으므로 무한 루프가됩니다. 내가 주장한대로 합계가 올바르게 작동하는지 어떻게 확인했는지 확신 할 수 없습니다. – csmckelvey

+0

네, 맞습니다.이 코드에'num = console.nextInt();'를 추가하는 것을 잊었습니다. 그러나 그것을 추가 한 후에도 숫자를 합계하지만 평균은 0으로 계산됩니다. –

+0

해당 줄을 추가 한 코드를 실행하면 합계가 잘못되었지만 잘못된 합계의 평균이 정확합니다. 5, 5, 5, 0을 입력하면 9.0의 합계와 3.0의 평균을 얻습니다. 다시 말하지만, 게시 한 코드가 설명하는 것을 수행하지 않아서 어떻게 볼 수 있는지 확신 할 수 없습니다. – csmckelvey

답변

2

지금 당신이 처음 그렇지 않으면 무한 루프로 이어질 것입니다 0를 입력하면, 루프는 종료됩니다. 오히려, 당신은 같은 루프 내에서 다음의 정수를 읽을해야합니다 : 또한

while(num != 0) { 
    value.add(new Integer(num)); 
    num = console.nextInt(); // add this line 
} 

를이 변경이에

sum += value.size(); 

:

sum += value.get(i); 

당신이 겠지만 각 반복마다 ArrayList 크기의 합계를 수행하는 대신 ArrayList 내부의 숫자를 단일 값으로 줄이기를 원합니다.

1

정확한 Aomine의 답변입니다. 그러나 유일한 문제는 아닙니다. for 루프에서 Arraylist의 크기를 'sum'변수에 추가합니다. 대신 보유하는 값을 합산해야합니다 (예 : 합계).

double average = 0.0; 
    double sum = 0; 
    int i = 0; 
    int num = 0; 

    Scanner console = new Scanner(System.in); 

    ArrayList<Integer> value = new ArrayList<Integer>(); 
    System.out.println("Enter value: "); 
    num = console.nextInt(); 
    while (num != 0) { 
     value.add(new Integer(num)); 
     num = console.nextInt(); 
    } 

    for (i = 0; i < value.size(); i++) { 
     sum += value.get(i); 
    } 
    average = sum/value.size(); 
    System.out.println("Number of values read: " + value.size()); 
    System.out.println("Values sum: " + sum + "Values average: " + average); 
관련 문제