2

我将首先列出任务是什么。然后我会列出我的问题。最后,我将列出到目前为止的代码,请注意,它远未完成,但在我完成这一步之前我无法继续。

任务:

本编程作业的目的是让您亲身体验使用 Java 多维数组、使用 Button 进行事件驱动编程以及使用 JFrame 和 JOptionPane 类应用 AWT 和 Swing。

节目要求:

使用 init() 编写一个 Java Applet 用于课程分数计算,具有以下要求:

使用 JoptionPane 允许教师输入学生人数、G 数字(不需要学生姓名。)、课程数量、课程 ID(CIT230、CIT352 等)和每门课程的分数。课程成绩必须存储在二维数组中。二维数组的一个例子是:

然后显示一个表格。请记住,我们没有使用 JTables。

添加按钮并使用事件驱动编程技术,允许用户点击三个按钮,“排序和列出学生的分数”、“显示每个学生的平均分数”和“退出”。

  1. “排序并列出学生的分数”按钮——显示每个学生的排序分数。
  2. “显示每个学生的平均分”——显示每个学生的平均分。
  3. “退出”——创建一个是或否对话框让用户退出程序。

我的问题:我不知道如何创建这个多维数组,其维度取决于用户输入的内容。行是学生人数,列是课程数。当我的程序有些工作时,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);
        }
    }

}
4

1 回答 1

0

您应该使用括号在循环之间包含语句以将其相乘。

其次,如果您不使用列索引器的另一个变量名,则某些值将为空。

   for (int  column = 0; column < table_Columns_numbers  ; column++)

   for (int  row = 0; row < table_rows_numbers; row++)
   {

   //Statement 1   ask user to enter the value 

    JOptionPane.showInputDialog("Please enter the value"); 

   //Statement 2   assign the value to your multidimensional array 

    array[row][column] = the value entered


    }

代码中的列号是课程编号

行号是学号的编号。

所以你使用 for 循环在 col 的课程号中输入学号 index+1 的分数。

并且每次您将输入的分数分配给表格单元格

for (int  col = 0; col < courseNumber; col++)

      for (int  index = 0; index < studentNumber; index++)
      {
      scoresString = JOptionPane.showInputDialog("Please enter the scores for Student " + (index+1));
      scores = Double.parseDouble(scoresString);

      //This is statement for explanation  

      System.out.println("scoresString  for student no \t"+(index+1)+"\t and course number \t"+ (col+1)+"\t"+scoresString);

     //Assigning value to   tableStudentScores[index][col] cell.

     tableStudentScores[index][col]=String.valueOf( scores);


    }

    JOptionPane.showMessageDialog( null ,Arrays.deepToString(tableStudentScores));
于 2013-12-05T08:39:09.970 回答