2014-10-21 3 views
-1

поэтому у меня есть вопрос, который хочет, чтобы пользователь вводил неизвестное количество чисел, затем вычислял общее и среднее значение этих чисел. Он хочет, чтобы мы использовали цикл while, чтобы запросить ввод чисел, исходя из того, сколько цифр пользователь сказал, что они должны были ввести. Как сохранить ввод, который затем будет использоваться для вычисления общего и среднего?Сохранение ввода из цикла while вне цикла

Это то, что у меня есть:

int numOfMarks, mark ; 
    Scanner kdb = new Scanner(System.in); 
    System.out.print("Enter number of marks: "); 
    numOfMarks = kbd.nextInt() ; 
    int i = 1 ; 

    while(i<=numOfMarks) { 
     System.out.print("Enter a mark: ") ; 
     mark = kbd.nextInt() ; 
     i=i+1 ; 
    } 

Но как есть, знак будет перезаписан и каждый раз, когда выполняется цикл. Как я могу хранить каждый вход петли для дальнейшего использования?

ответ

0

Для всего общего и среднего значения необходимо сохранить две переменные вокруг - по одному для общего числа и по числу чисел. Но у вас уже есть это - numOfMarks.

Так определяют:

double total = 0; 

Внутри цикла, добавьте каждую метку к итогу.

total += mark; 

Тогда в конце концов, вы можете напечатать:

System.out.println("Total: " + total); 
System.out.println("Average: " + (total/numOfMarks)); 

Причина я использую двойника в том, что в среднем, вероятно, не является целым числом. Вы можете использовать длинные (или даже int для большинства случаев), если вы хотите, чтобы среднее было округлено.

0

Нет необходимости хранить их все, есть нарастающий итог и в среднем в конце ...

double total=0.0; 

while(i<=numOfMarks) { 
     System.out.print("Enter a mark: ") ; 
     mark = kbd.nextInt() ; 
     i=i+1 ; 

     //new code 
     total+= mark; 
    } 

System.out.println("Total= " + total); 
System.out.println("Avergae= " + total/numOfMarks); 
0

Вы можете создать нарастающий итог, а также использовать средний = общее/numOfMarks

int total = 0; 
while(i<=numOfMarks) { 
    System.out.print("Enter a mark: ") ; 
    mark = kbd.nextInt() ; 
    total += mark; 
    i=i+1 ; 
}  

int avg = total/numOfMarks; 

FYI, если вам нужно выполнить более сложный анализ (например, найти медианную), вы можете использовать структуру данных, такую ​​как ArrayList<int>, для хранения данных, как она поступает в

http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html

ArrayList<int> marks = new ArrayList<int>(); 
while(i<=numOfMarks) { 
    System.out.print("Enter a mark: ") ; 
    mark = kbd.nextInt() ; 
    marks.add(mark); 
    i=i+1 ; 
}  
0

Вы можете сохранить его в ArrayList.

int numOfMarks, mark ; 
Scanner kdb = new Scanner(System.in); 
List<Integer> myValues = new ArrayList<Integer>(); 
System.out.print("Enter number of marks: "); 
numOfMarks = kbd.nextInt() ; 
int i = 1 ; 

while(i<=numOfMarks) { 
    System.out.print("Enter a mark: ") ; 
    myValues.add(kbd.nextInt()); 
    i=i+1 ; 
} 

//now you have a list of all the values and you can do what you want. 
0

Вы можете хранить их в массиве, но учитывая все, что вам нужно, это общее и среднее значение, вы можете просто добавлять к сумме каждый цикл. В конце вы получите общее количество и можете просто вычислить среднее значение из этого. Пример:

int numOfMarks, totalMarks; 
Scanner kdb = new Scanner(System.in); 
System.out.print("Enter number of marks: "); 
numOfMarks = kbd.nextInt(); 
int i = 1; 

while(i<=numOfMarks) { 
    System.out.print("Enter a mark: "); 
    totalMarks = totalMarks + kbd.nextInt(); // add it to the total 
    i=i+1; 
} 

// when the loop is done, compute the average. The total is already computed. 
double average = totalMarks/numOfMarks; 

// print it out maybe 
System.out.println("Total: " + totalMarks); 
System.out.println("Average: " + average); 
Смежные вопросы