2015-02-20 2 views
0

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

Студент 1

Введите ваш счет: 100

Введите ваш счет: 90

Введите ваш счет: 80

Enter ваш счет: 70

Введите ваш отзыв: -1 * после того, как студент войдет -1, он должен вычислить средний

Средняя оценка = 85.

Студент 2

Введите ваш счет: 90

ETC

ETC

Проблема с моим кодом является то, что в среднем это верно только для первый ученик. Когда я вводю -1, чтобы получить среднее значение для второго ученика, расчет неверен. Нам разрешено использовать циклы. Единственными намеками, которые мне были даны, было то, что мы должны написать внешний цикл, который повторяется 4 раза, пишите внутренний цикл, который петли, пока студент имеет баллы для ввода, во внутреннем запросе цикла пользователь должен ввести свой последний счет или -1 для вычисления среднего значения. Я не хочу, чтобы вы, ребята, делали проект для меня, но просто поставили меня в правильном направлении. Я чувствую, что не использую правильный цикл.

import java.util.Scanner; 

public class TestScore 

{ 

    public static void main(String[]args) 
    { 

     double score = 0; 

     double totalScore = 0; 

     double count = 0; 

     double average = 0; 

     Scanner input = new Scanner(System.in); 


     System.out.println("Student 1"); 
     System.out.printf("Enter Your Score: "); 
     score = input.nextDouble(); 



     while (score != -1){ 
      System.out.printf("Enter Your Score: "); 
      totalScore = totalScore + score; 
      score = input.nextDouble(); 
      count++; 
      average = totalScore/count; 

      if (score == -1){ 
       System.out.printf("Average Score = %.2f\n ",average); 
       count = 0; 
       score = 0; 
       totalScore = 0; 
       average = 0; 
       System.out.println("Student 2"); 
       System.out.printf("Enter Your Score: "); 
       score = input.nextDouble(); 
       count++; 
       average = totalScore/count; 
      } 

     } 



} 



} 
+0

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

+0

Ну, где ваш внешний цикл? – RealSkeptic

+0

Спасибо за ответ, однако нам не разрешено использовать массивы. –

ответ

2

Вы не задали явный вопрос, поэтому я попытаюсь выполнить часть «поставил меня в правильном направлении».

Я предлагаю переформатирование структуры петли для уборщик один, как это:

double total; 
for(int student = 1; student <= 4; student++) { 
    System.out.printf("Student %d\n", student); 
    double sum = 0, count = 0; 

    while(true) { 
     System.out.printf("Enter your score: "); 
     double input = scanner.nextDouble(); 
     if(input == -1) break; 
     sum += input; 
     count++; 
    } 
    total += sum; 

    System.out.printf("Average: %.2f\n", sum/count); 
} 

System.out.printf("Total: %.2f\n", total); 

Надеется, что этого достаточно, чтобы дать вам несколько советов.

редактировать: забыли позаботиться о total

+0

Спасибо за помощь, это определенно помогло. Однако нам также не разрешено использовать инструкции break. Я попытаюсь обойти это. –

+0

О, в этом случае рассмотрите возможность изменения внутреннего цикла while в 'do ... while'. Не стесняйтесь спрашивать (комментировать) снова, если вам нужно больше указателей! –

+0

Спасибо, человек, вы много помогли. –

0

Итак, вы хотите итеративно пройти через все входные и просто помните, максимальный. Сделайте целочисленную переменную max и после каждого ученика, просто измените ее, если необходимо. (Он равен нулю по умолчанию jn Java) Что касается расчета для каждого учащегося, вы не должны проверять состояние «score! = - 1» в каждой итерации. Вместо этого вы должны выполнить окончательные вычисления после цикла while. (среднее, возможное обновление максимума, сброс переменных и т. д.) Вам также нужен внешний цикл (в указанном коде эти вычисления выполняются только для одного ученика), которым вы будете управлять другим способом.

Кроме того, если вам нужно использовать только 4 разряда, вам может потребоваться использовать цикл for.

+0

Да, я решил, что мне нужно использовать цикл for. Спасибо за вашу помощь. –

0

Вы можете попробовать это: D

public static void main (String[] args) throws java.lang.Exception 
{ 
    double average = 0; 
    double i = 0; 
    int student = 0; 
    boolean flag = true; 
    Scanner input = new Scanner(System.in); 
    while(flag) 
    { 
     System.out.printf("Student: "); 
     System.out.println(student); 
     System.out.print("Enter Your Score: "); 

     double score = input.nextDouble(); 
     if(score!=-1){ 
      average=average+score; 
      i=i+1; 
     } 

     if(score==-1){ 
      System.out.printf("Average: "); 
      System.out.println(average/i); 
      //reset values 
      average = 0; 
      i = 0; 
      student=student+1; 
     } 
     if(score==-2){ 
      //you need break the while in some moment. 
      flag = false; 
     } 
    } 
} 
+0

Спасибо, я попробую. –

+0

@John Doe: Это простой код и решить вашу проблему. –