繁体   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