2015-11-13 4 views
3

Моя программа по какой-то причине неправильно вычисляет средний балл GPA. Если я вхожу в 4.0 три раза, тогда он говорит, что средний GPA равен 3.0, но должен быть 4.0. Может ли кто-нибудь помочь мне найти проблему?Ошибка программы Java GPA

//variables 
double gpa = 0; 
double total = 0; 
int counter = 0; 
int counter2 = 0; 

do 
{ 
    String gpaEntry = JOptionPane.showInputDialog("Please enter GPAs:"); 
    gpa = Double.parseDouble(gpaEntry); 

    if (gpa >= 3.5) 
     counter2 ++; 

    total += gpa; 
     counter ++; 
} 
while (gpa != 0); 

double average = (double) (total/counter); 

JOptionPane.showMessageDialog(null, "The Average GPA is: " + average); 
JOptionPane.showMessageDialog(null, "Number of students:" + counter2); 
+2

ли в 0 счетчика как запись? –

+2

Я не хочу этого. Я хотел бы, чтобы 0 остановил вход в GPA, а затем продолжил работу с программой. – Saverio

+2

Хорошо, а почему бы вам не сделать это? –

ответ

5

Давайте пройдемся по коду

  • ГПД = 0
  • пользовательского ввод прибудет (пользователь вводит '2')
  • теперь GPA = 2
  • общих + = 2
  • счетчика + +
  • while (gpa! = 0) // nope, gpa is 2
  • Обратный путь
  • получить пользовательский ввод (пользователь вводит '0')
  • Теперь ГПД = 0
  • общая + = 0
  • счетчик ++ // упс!
  • в то время как (GPA! = 0) // да, выйти из цикла

, но это слишком поздно, мы уже увеличивается counter, поэтому наш average расчет неправильно

+0

Так что я должен использовать оператор if/else, чтобы проверить, является ли оно 0, а затем продолжить работу с программой? – Saverio

+0

Существует несколько способов исправить это. 1) переместить/дублировать код ввода пользователя, как @ ikhalq15. 2) добавьте 'if (gpa == 0) break' после получения пользовательского ввода 3) или' if (gpa! = 0) counter ++ '4) выполните' counter - 'после того, как ваш цикл будет выполнен. –

+0

Спасибо! Я использовал вариант 2. – Saverio

0

Неправильно то, что если пользователь вводит 0, он запускает программу и затем завершает работу.

Попробуйте этот код (Извините, у меня нет редактора на данный момент, поэтому вам может понадобиться исправить небольшую вещь).

//variables 
double gpa = 0; 
double total = 0; 
int counter = 0; 
int counter2 = 0; 

String gpaEntry = JOptionPane.showInputDialog("Please enter GPAs:"); 
gpa = Double.parseDouble(gpaEntry); 

while (gpa != 0) { 
    if (gpa >= 3.5) 
     counter2 ++; 

    total += gpa; 
    counter ++; 

    gpaEntry = JOptionPane.showInputDialog("Please enter GPAs:"); 
    gpa = Double.parseDouble(gpaEntry); 
} 

JOptionPane.showMessageDialog(null, "The Average GPA is: " + average); 
JOptionPane.showMessageDialog(null, "Number of students:" + counter2); 

Комментарий, если у вас есть еще вопросы.

Смежные вопросы