如何在学生成绩计算器程序中获得相似成绩字母的总数

时间:2015-11-24 18:18:39

标签: java swing

我的课程计算了具有六种不同分数的30名学生的成绩,然后显示每个学生的字母等级。我已经这样做了,但我的问题是如何计算A,B,C,D,D和F的数量。

我希望我的输出是这样的:

A的数量是:

B的数量是:

C的数量是:

D的数量是:

F的数量是:

enter image description here

import javax.swing.*;
import java.awt.*;
import java.io.*;
import java.util.Scanner;

public class FinalGrade extends JPanel
{
        public static String firstName[]= new String[30];
        public static String lastName[] = new String[30];
        public static String grade[]=new String[30];
        public static int HW1;
        public static int HW2;
        public static int HW3;
        public static int Project;
        public static int Midterm;
        public static int Final;
        public static double Avg_homework;
        public static double Avg_exam;
        public static double Final_numeric_grade;


     public FinalGrade()
     {
     super(new GridLayout(1,0));

     String[] columnNames = {"First Name", "Last Name", "Final Grade"};

     Object[][] data = {
     {firstName[0], lastName[0], grade[0]},
     {firstName[1], lastName[1], grade[1]},
     {firstName[2], lastName[2], grade[2]},
     {firstName[3], lastName[3], grade[3]},
     {firstName[4], lastName[4], grade[4]},
     {firstName[5], lastName[5], grade[5]},
     {firstName[6], lastName[6], grade[6]},
     {firstName[7], lastName[7], grade[7]},
     {firstName[8], lastName[8], grade[8]},
     {firstName[9], lastName[9], grade[9]},
     {firstName[10], lastName[10], grade[10]},
     {firstName[11], lastName[11], grade[11]},
     {firstName[12], lastName[12], grade[12]},
     {firstName[13], lastName[13], grade[13]},
     {firstName[14], lastName[14], grade[14]},
     {firstName[15], lastName[15], grade[15]},
     {firstName[16], lastName[16], grade[16]},
     {firstName[17], lastName[17], grade[17]},
     {firstName[18], lastName[18], grade[18]},
     {firstName[19], lastName[19], grade[19]},
     {firstName[20], lastName[20], grade[20]},
     {firstName[21], lastName[21], grade[21]},
     {firstName[22], lastName[22], grade[22]},
     {firstName[23], lastName[23], grade[23]},
     {firstName[24], lastName[24], grade[24]},
     {firstName[25], lastName[25], grade[25]},
     {firstName[26], lastName[26], grade[26]},
     {firstName[27], lastName[27], grade[27]},
     {firstName[28], lastName[28], grade[28]},
     {firstName[29], lastName[29], grade[29]}
      };

     final JTable table = new JTable(data, columnNames);

     table.setPreferredScrollableViewportSize(new Dimension(300,400));

     table.setFillsViewportHeight(true);

     JScrollPane scrollPane = new JScrollPane(table);
     add(scrollPane);
     }

      private static void createAndShowGUI() {
        //Create and set up the window.
        JFrame frame = new JFrame("Grade Display");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //Create and set up the content pane.
        FinalGrade newContentPane = new FinalGrade();
        newContentPane.setOpaque(true); //content panes must be opaque
        frame.setContentPane(newContentPane);

        //Display the window.
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) throws FileNotFoundException
    {
        Scanner input = new Scanner (new File ("student_grades_input.txt"));

        int count = 0;
        while (input.hasNext())
        {
            firstName[count] = input.next();
            lastName[count] =  input.next();
            HW1 = input.nextInt();
            HW2 = input.nextInt();
            HW3 = input. nextInt();
            Project = input.nextInt();
            Midterm = input.nextInt();
            Final = input.nextInt();


            Avg_homework = (HW1 + HW2 + HW3)/3;

            Avg_exam = (Midterm + Final)/2;


            Final_numeric_grade = 0.45 * Avg_homework + 0.25 * Project + 0.30 * Avg_exam ;

            if (Final_numeric_grade > 89)

                  grade[count] = "A";


           else if (Final_numeric_grade > 79 && Final_numeric_grade < 90)

                  grade[count] = "B";



          else if (Final_numeric_grade > 69 && Final_numeric_grade < 80)

                  grade[count] = "C";


          else if (Final_numeric_grade > 59 && Final_numeric_grade < 70)

             grade[count] = "D";


            else

             grade[count] = "F";


            count++;
            }

        input.close();
        createAndShowGUI();                


    }

}

3 个答案:

答案 0 :(得分:1)

您可以使用数组来存储第一个索引为“A”的等级计数,第二个索引为“B”。您甚至可以在设置grade数组时执行此操作。这样的事情可以解决问题:

int[] gradeCount = new int[5]; //Define before your while (input.hasNext())
...
if (Final_numeric_grade > 89){
    grade[count] = "A";
    gradeCount[0]++;}
else if (Final_numeric_grade > 79 && Final_numeric_grade < 90){
    grade[count] = "B";
    gradeCount[1]++;}
else if (Final_numeric_grade > 69 && Final_numeric_grade < 80){
    grade[count] = "C";
    gradeCount[2]++;}
else if (Final_numeric_grade > 59 && Final_numeric_grade < 70){
    grade[count] = "D";
    gradeCount[3]++;}
else{
    grade[count] = "F";
    gradeCount[4]++;}

然后,当您需要访问成绩时,请执行以下操作:

System.out.println("Number of A: " + gradeCount[0]);
System.out.println("Number of B: " + gradeCount[1]);
System.out.println("Number of C: " + gradeCount[2]);
System.out.println("Number of D: " + gradeCount[3]);
System.out.println("Number of F: " + gradeCount[4]);

答案 1 :(得分:0)

您设置好所有成绩并拥有6个计数器(每个字母1个)后,您所要做的就是遍历grade数组:

int numberOfA = 0;
int numberOfB = 0;
int numberOfC = 0;
int numberOfD = 0;
int numberOfE = 0;
int numberOfF = 0;
for (int i = 0; i < grade.length; i++) {
    if (grade[i].equals("A")) {
        numberOfA++;
    } else if (grade[i].equals("B")) {
        numberOfB++;
    } else if (grade[i].equals("C")) {
        numberOfC++;
    } else if (grade[i].equals("D")) {
        numberOfD++;
    } else if (grade[i].equals("E")) {
        numberOfE++;
    } else {
        numberOfF++;
    }
}

然后只需打印或做任何你需要做的计数器:

System.out.println("Number of A: " + numberOfA);
System.out.println("Number of B: " + numberOfB);
System.out.println("Number of C: " + numberOfC);
System.out.println("Number of D: " + numberOfD);
System.out.println("Number of E: " + numberOfE);
System.out.println("Number of F: " + numberOfF);

另请关注Java naming conventions

  

除变量外,所有实例,类和类常量都是小写的第一个字母。内部单词以大写字母开头。变量名不应以下划线_或美元符号$字符开头,即使两者都是允许的。

从上面:Variable names should start with lower case while classes names should start with an upper case

修改

同样@Gonzo stated你可以使用你已经拥有的代码上的计数器,这将提高性能,因为你不会在同一个数组上迭代两次,你可以这样做:

if (Final_numeric_grade > 89) { //Be sure to add curly brackets
    grade[count] = "A";
    numberOfA++;
} //And close them
else if (Final_numeric_grade > 79 && Final_numeric_grade < 90) {
    grade[count] = "B";
    numberOfB++;
} 
//And so on ...

按照我上面说的那样打印它们。只需确保在递增变量之前初始化变量:)

答案 2 :(得分:0)

可以有很多方法可以做到这一点。一种简单的方法是定义每个等级的计数器变量,并在确定等级时在while循环中递增它们。类似的东西:

int gradeACounter=0, gradeBCounter=0;

 if (Final_numeric_grade > 89){

              grade[count] = "A";
              gradeACounter++;
 }

       else if (Final_numeric_grade > 79 && Final_numeric_grade < 90){

              grade[count] = "B";
              gradeBCounter++;
}