最初に、割り当てが何であったかをリストします。次に、私の問題をリストします。最後に、これまでのコードをリストしますが、完全には程遠いですが、このステップを過ぎるまで先に進むことはできません。
割り当て:
このプログラミング課題の目的は、Java 多次元配列の使用、ボタンを使用したイベント駆動型プログラミング、および JFrame と JOptionPane クラスを使用した AWT と Swing のアプリケーションを実際に体験できるようにすることです。
プログラム要件:
次の要件で、コースのスコア計算のために init() を使用して Java アプレットを作成します。
JoptionPane を使用して、講師が受講者数、G ナンバー (受講者名は不要)、コース数、コース ID (CIT230、CIT352 など)、コースごとのスコアを入力できます。コースのスコアは、2 次元配列に格納する必要があります。2 次元配列の例は次のとおりです。
するとテーブルが表示されます。JTables を使用していないことに注意してください。
ボタンを追加し、イベント駆動型プログラミング手法を使用して、ユーザーが「学生のスコアの並べ替えと一覧表示」、「各学生の平均スコアの表示」、および「終了」の 3 つのボタンをクリックできるようにします。
- [学生のスコアを並べ替えて一覧表示] ボタン -- 各学生のスコアを並べ替えて表示します。
- 「各生徒の平均点を表示」 -- 各生徒の平均点を表示します。
- 「終了」 -- ユーザーがプログラムを終了するための [はい] または [いいえ] ダイアログ ボックスを作成します。
私の問題: この多次元配列を作成する方法がわかりません。次元はユーザーの入力に基づいています。行は学生数、列はコース数です。私のプログラムがある程度動いているとき、JOptionPane は [[null][null]] を表示していました。JOptionPane ではなく、以前に設定された次元で 2 次元配列を作成する方法を知っていますが、これは私を道に迷わせています。直接の回答コードを求めているわけではありません。これを書くための正しい方法の例またはガイダンスが必要なだけです。
私のコード:
(試してみてうまくいかなかったことがいくつかコメントアウトされています。さまざまな方法を試しましたが、それらを削除するだけです。)
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);
}
}
}