簡體   English   中英

如何獲得我的學生成績計算器程序中類似成績字母的總數

[英]how can i get the total number of similar grade letters in my student grade calculator program

我的程序計算30位學生的成績(六個不同的分數),然后顯示每位學生的字母成績。 我已經這樣做了,但是我的問題是如何計算A,B,C,D和F的數量。

我希望我的輸出是這樣的:

A的數目為:

B的數目為:

C的數目為:

D的數目為:

F的數量為:

在此處輸入圖片說明

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();                


    }

}

您可以使用數組存儲成績的計數,其中第一個索引為“ 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]);

您要做的就是在設置完所有成績並擁有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命名約定

除變量外,所有實例,類和類常量均以小寫首字母混合使用。 內部單詞以大寫字母開頭。 變量名稱不應以下划線_或美元符號$字符開頭,即使兩者都允許。

從上Variable names should start with lower case while classes names should start with an upper caseVariable names should start with lower case while classes names should start with an upper case


編輯

就像@Gonzo 所說的那樣,您可以在已有的代碼上使用計數器,這將提高性能,因為您不會在同一數組上進行兩次迭代,您可以這樣做:

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 ...

並按我上面所述打印它們。 只需確保在增加變量之前初始化變量即可:)

有很多方法可以做到這一點。 一種簡單的方法是為每個成績定義計數器變量,並在確定成績時在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++;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM