我将首先列出任务是什么。然后我会列出我的问题。最后,我将列出到目前为止的代码,请注意,它远未完成,但在我完成这一步之前我无法继续。
任务:
本编程作业的目的是让您亲身体验使用 Java 多维数组、使用 Button 进行事件驱动编程以及使用 JFrame 和 JOptionPane 类应用 AWT 和 Swing。
节目要求:
使用 init() 编写一个 Java Applet 用于课程分数计算,具有以下要求:
使用 JoptionPane 允许教师输入学生人数、G 数字(不需要学生姓名。)、课程数量、课程 ID(CIT230、CIT352 等)和每门课程的分数。课程成绩必须存储在二维数组中。二维数组的一个例子是:
然后显示一个表格。请记住,我们没有使用 JTables。
添加按钮并使用事件驱动编程技术,允许用户点击三个按钮,“排序和列出学生的分数”、“显示每个学生的平均分数”和“退出”。
- “排序并列出学生的分数”按钮——显示每个学生的排序分数。
- “显示每个学生的平均分”——显示每个学生的平均分。
- “退出”——创建一个是或否对话框让用户退出程序。
我的问题:我不知道如何创建这个多维数组,其维度取决于用户输入的内容。行是学生人数,列是课程数。当我的程序有些工作时,JOptionPane 将显示 [[null][null]]。我知道如何创建一个不在 JOptionPane 中并且具有先前设置的维度的二维数组,但这让我很失望。我不是要直接回答代码,我只需要一个示例或一些正确编写方法的指导。
我的代码:
(我有一些东西被注释掉了,我已经尝试过但没有奏效。我尝试了很多不同的方法,但我只是删除了它们。)
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Arrays;
public class ScoreApplet extends JApplet implements ActionListener
{
private JLabel mainMenu;
private JButton sortScores;
private JButton displayAverage;
private JButton exit;
private String[][] tableStudentScores;
private int studentNumber;
private int courseNumber;
private String studentNumberString;
private String courseNumberString;
private String scoresString;
private double scores;
public void init()
{
Container contentPane = getContentPane();
contentPane.setBackground(Color.WHITE);
contentPane.setLayout(new FlowLayout());
mainMenu = new JLabel("What would you like to do?");
sortScores = new JButton("Sort And List Student's Scores");
displayAverage = new JButton("Display Average Score for Each Student");
exit = new JButton ("Exit");
contentPane.add(mainMenu);
contentPane.add(sortScores);
sortScores.addActionListener(this);
contentPane.add(displayAverage);
displayAverage.addActionListener(this);
contentPane.add(exit);
exit.addActionListener(this);
mainMenu.setVisible(false);
sortScores.setVisible(false);
displayAverage.setVisible(false);
exit.setVisible(false);
studentNumberString = JOptionPane.showInputDialog("Please enter the number of students:");
studentNumber = Integer.parseInt(studentNumberString);
tableStudentScores = new String[studentNumber][];
courseNumberString = JOptionPane.showInputDialog("Please enter the number of courses:");
courseNumber = Integer.parseInt(courseNumberString);
tableStudentScores = new String[studentNumber][courseNumber];
for (int index = 0; index < studentNumber; index++)
for (index = 0; index < courseNumber; index++)
scoresString = JOptionPane.showInputDialog("Please enter the scores for Student " + (index+1));
scores = Double.parseDouble(scoresString);
/*
for (int index = 0; index <= (courseNumber - 1); index++)
{
scoresString = JOptionPane.showInputDialog("Please enter the scores for Student " + (index+1) );
scores = Double.parseDouble(scoresString);
}
*/
JOptionPane.showMessageDialog(null, Arrays.deepToString(tableStudentScores));
mainMenu.setVisible(true);
sortScores.setVisible(true);
displayAverage.setVisible(true);
exit.setVisible(true);
}
public void actionPerformed(ActionEvent e)
{
if (e.getActionCommand().equals("Sort And List Student's Scores"))
{
/*
}
for (int index = 0; index < anArray.length - 1; index++)
{ // Place the correct value in anArray[index]
int indexOfNextSmallest = getIndexOfSmallest(index, anArray);
interchange(index, indexOfNextSmallest, anArray);
*/
}
else if (e.getActionCommand().equals("Display Average Score for Each Student"))
{
}
else if (e.getActionCommand().equals("Exit"));
{
int answer =
JOptionPane.showConfirmDialog(null, "End program?",
"Click Yes or No:", JOptionPane.YES_NO_OPTION);
if (answer == JOptionPane.YES_OPTION)
System.exit(0);
}
}
}