2015-02-25 5 views
0

Я работаю над java-программой, которая принимает введенные оценки, дает общее количество введенных значений и среднее значение, однако у меня возникают проблемы с выяснением того, как сделать высшую оценку, введенную в настоящее время. Я использую тонну вложенного else, если утверждения, но там должен быть простой способ сделать это, а не вводить 100 иначе, если заявления Heres мой код. Я положил комментарий, где еще, если заявления начинаются, определяющие высший сортЕсть ли более простой способ сделать это, если утверждение?

//Jonathan Towell 
//This program will take grade inputs and then display the amount of A's B's C's D's and F's 
import javax.swing.JOptionPane; 


public class Grades 
{ 
public static void main(String[] args) 
{ 
    JOptionPane.showMessageDialog(null, "Welcome to Jonathan's Gradebook"); 
    int A = 0, B = 0, C = 0, D = 0, F = 0; 
    int totalGrades = 0, grade = 0, averageGrade = 0, highestGrade = 0; 
    while (grade >= 0) 
    { 
    grade = Integer.parseInt(JOptionPane.showInputDialog("Enter one grade followed by the enter key\n when finished enter -1")); 
    if (grade <= 100 && grade >= 90) 
    { 
     A = A + 1; 
     totalGrades = totalGrades + 1; 
     averageGrade = averageGrade + grade; 
     if (grade == 100) // Determines highest grade 
     { 
      highestGrade = 100; 
     } 
     else if (grade == 99) 
     { 
      highestGrade = 99; 
     } 
     else if (grade == 98) 
     { 
      highestGrade = 98; 
     } 
     else if (grade == 97) 
     { 
      highestGrade = 97; 
     } 
     else if (grade == 96) 
     { 
      highestGrade = 96; 
     } 
     else if (grade == 95) 
     { 
      highestGrade = 95; 
     } 
     else if (grade == 94); 
     { 
      highestGrade = 94; 
     } 
    } 

    else if (grade > 100) 
    { 
     JOptionPane.showMessageDialog(null, "No extra credit for this assignment\n please enter a value less than 100"); 
    } 
    else if (grade <= 89 && grade >= 80) 
    { 
     B = B + 1; 
     totalGrades = totalGrades + 1; 
     averageGrade = averageGrade + grade; 
    } 
    else if (grade <= 79 && grade >= 70) 
    { 
     C = C + 1; 
     totalGrades = totalGrades + 1; 
     averageGrade = averageGrade + grade; 
    } 
    else if (grade <= 69 && grade >= 60) 
    { 
     D = D + 1; 
     totalGrades = totalGrades + 1; 
     averageGrade = averageGrade + grade; 
    } 
    else if (grade <= 59 && grade >= 0) 
    { 
     F = F + 1; 
     totalGrades = totalGrades + 1; 
     averageGrade = averageGrade + grade; 
    } 
    } 
    averageGrade = (averageGrade/totalGrades); 
    JOptionPane.showMessageDialog(null, "Total number of grades entered was " + totalGrades + "\n The average grade was: " + averageGrade + " percent." + "\nA's: " + A + "\nB's: " + B + "\nC's: " + C + "\nD's: " + D + "\nF's: " + F + "\nThe highest grade earned was: " + highestGrade + " percent."); 
    System.exit(0); 
} 


} 

ответ

1

Jonathon,

Вы повторяете много своего кода. В каждом из предложений if вы повторяете те же две строки кода. Почему бы не сделать эти две строки кода вне предложения if в конце. Эти две строки повторяются: totalGrades = totalGrades + 1; среднийGrade = средний класс + класс;

Что касается огромной, если заявление для если (класс == 100) // Определяет высокий класс {

Замените его: класс = (класс> highestGrade highestGrade: класс); // Определяет наивысший класс

Вы также можете использовать: высший класс = Math.max (высший класс, класс);

Я также повторно заказал часть кода. В заявлении if указано, что «если между 100 и 90» затем идет «если выше 100». Это просто сбивает с толку. Я заказал его как «если выше 100», а затем «если между 100 и 90», гораздо логичнее.

Конечный код должен выглядеть следующим образом:

public class Grades 
{ 
    public static void main(String[] args) 
    { 
     JOptionPane.showMessageDialog(null, "Welcome to Jonathan's Gradebook"); 
     int A = 0, B = 0, C = 0, D = 0, F = 0; 
     int totalGrades = 0, grade = 0, averageGrade = 0, highestGrade = 0; 
     while (grade >= 0) 
     { 
     grade = Integer.parseInt(JOptionPane.showInputDialog("Enter one grade followed by the enter key\n when finished enter -1")); 
     if (grade > 100) { 
      JOptionPane.showMessageDialog(null, "No extra credit for this assignment\n please enter a value less than 100"); 
     } else if (grade <= 100 && grade >= 90) { 
      A = A + 1; 
      grade = (grade > highestGrade ? highestGrade : grade);// Determines highest grade 
     } else if (grade <= 89 && grade >= 80) { 
      B = B + 1; 
     } else if (grade <= 79 && grade >= 70) { 
      C = C + 1; 
     } else if (grade <= 69 && grade >= 60) { 
      D = D + 1; 
     } else if (grade <= 59 && grade >= 0) { 
      F = F + 1; 
     } 
     totalGrades = totalGrades + 1; 
     averageGrade = averageGrade + grade; 
     averageGrade = (averageGrade/totalGrades); 
     JOptionPane.showMessageDialog(null, "Total number of grades entered was " + totalGrades + "\n The average grade was: " + averageGrade + " percent." + "\nA's: " + A + "\nB's: " + B + "\nC's: " + C + "\nD's: " + D + "\nF's: " + F + "\nThe highest grade earned was: " + highestGrade + " percent."); 
     System.exit(0); 
    } 

} 

Позвольте мне знать, если это, кажется, лучше для вас.

+0

Это работало отлично для меня, и это было именно то, что я искал –

2

чтобы сделать это более управляемым, вы можете рассмотреть возможность использования Factory Pattern с полиморфизмом и иметь все скобки для классов (if, else-if), реализованные в их собственном отдельном классе.

+0

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

+0

Я убираю свой предыдущий оператор, этот код можно упростить. –

+0

Я понятия не имею, что такое перечисление или полиморфизм, мы еще не научились взаимодействовать друг с другом. Хотя я ценю обратную связь, я еще не участвую в обучении java –

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