我的课程计算了具有六种不同分数的30名学生的成绩,然后显示每个学生的字母等级。我已经这样做了,但我的问题是如何计算A,B,C,D,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();
}
}
答案 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);
除变量外,所有实例,类和类常量都是小写的第一个字母。内部单词以大写字母开头。变量名不应以下划线_或美元符号$字符开头,即使两者都是允许的。
从上面: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++;
}