[英]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 case
: Variable 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.