输出二维数组的问题......?

时间:2013-04-18 22:56:44

标签: java arrays list dimensional

这是一个程序的开始,它组织学生和他们的成绩来自四个不同的班级。最终我将添加平均值和什么不是。然而,目前我在'studentListField'中输出成绩时遇到问题 - 请参阅下面的...'addButton'之后。     我对java和这个特殊的程序(netbeans)很陌生,我正在使用它来构建它,因此我要求提供指导和帮助。**

package studentgrades;

import org.jdesktop.application.Action;
import org.jdesktop.application.ResourceMap;
import org.jdesktop.application.SingleFrameApplication;
import org.jdesktop.application.FrameView;
import org.jdesktop.application.TaskMonitor;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Timer;
import javax.swing.Icon;
import javax.swing.JDialog;
import javax.swing.JFrame;

/**
 * The application's main frame.
 */
public class StudentGradesView extends FrameView {

    **//This the all important array...you can list up to 5 students and list 4 test marks of each student.**
    int[][]aryStudent = new int [5][4];

    public StudentGradesView(SingleFrameApplication app) {

****// between here is just a bunch of stuff that was automatically added from when I built the GUI** 

}
    private void exitButtonActionPerformed(java.awt.event.ActionEvent evt) {                                           
    System.exit(0);
    }                                          

    private void addButtonActionPerformed(java.awt.event.ActionEvent evt) {                                          

        **// left "[]" is the student... right "[]" holds the grades...
        // test1Field (1-4) is a JTextField where you input the test grade...I hope that was clear with the name I gave it...**
        aryStudent[0][0] = Integer.parseInt(test1Field.getText());
        aryStudent[0][1] = Integer.parseInt(test2Field.getText());
        aryStudent[0][2] = Integer.parseInt(test3Field.getText());
        aryStudent[0][3] = Integer.parseInt(test4Field.getText());

        aryStudent[1][0] = Integer.parseInt(test1Field.getText());
        aryStudent[1][1] = Integer.parseInt(test2Field.getText());
        aryStudent[1][2] = Integer.parseInt(test3Field.getText());
        aryStudent[1][3] = Integer.parseInt(test4Field.getText());

        aryStudent[2][0] = Integer.parseInt(test1Field.getText());
        aryStudent[2][1] = Integer.parseInt(test2Field.getText());
        aryStudent[2][2] = Integer.parseInt(test3Field.getText());
        aryStudent[2][3] = Integer.parseInt(test4Field.getText());

        aryStudent[3][0] = Integer.parseInt(test1Field.getText());
        aryStudent[3][1] = Integer.parseInt(test2Field.getText());
        aryStudent[3][2] = Integer.parseInt(test3Field.getText());
        aryStudent[3][3] = Integer.parseInt(test4Field.getText());

        aryStudent[4][0] = Integer.parseInt(test1Field.getText());
        aryStudent[4][1] = Integer.parseInt(test2Field.getText());
        aryStudent[4][2] = Integer.parseInt(test3Field.getText());
        aryStudent[4][3] = Integer.parseInt(test4Field.getText());

        aryStudent[5][0] = Integer.parseInt(test1Field.getText());
        aryStudent[5][1] = Integer.parseInt(test2Field.getText());
        aryStudent[5][2] = Integer.parseInt(test3Field.getText());
        aryStudent[5][3] = Integer.parseInt(test4Field.getText());


        int student = 5;
        int marks = 4;

        for (int x=0; x < student ; x++) {
            for (int y=0; y < marks ; y++) {
                **//And if it did work it should output this along with the test scores...At least I hoped it would...**
                studentListField.setText(aryStudent[x][y] + "");
            }
            //System.out.println("");

            /**
             * This was the errors that came up...
             * 
             Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 5
             at studentgrades.StudentGradesView.addButtonActionPerformed(StudentGradesView.java:405)
             at studentgrades.StudentGradesView.access$800(StudentGradesView.java:22)
             at studentgrades.StudentGradesView$4.actionPerformed(StudentGradesView.java:182)
             at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
             at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
             at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
             at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
             at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
             at java.awt.Component.processMouseEvent(Component.java:6505)
             */
        }
    }                                         

    // Variables declaration - do not modify                     
    private javax.swing.JButton addButton;
    private javax.swing.JButton exitButton;
    private javax.swing.JTextField firstNameField;
    private javax.swing.JLabel firstNameLabel;
    private javax.swing.JButton jButton3;
    private javax.swing.JButton jButton4;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JTextField jTextField6;
    private javax.swing.JTextField lastNameField;
    private javax.swing.JLabel lastNameLabel;
    private javax.swing.JButton listButton;
    private javax.swing.JPanel mainPanel;
    private javax.swing.JMenuBar menuBar;
    private javax.swing.JProgressBar progressBar;
    private javax.swing.JLabel statusAnimationLabel;
    private javax.swing.JLabel statusMessageLabel;
    private javax.swing.JPanel statusPanel;
    private javax.swing.JTextField studentListField;
    private javax.swing.JTextField test1Field;
    private javax.swing.JTextField test2Field;
    private javax.swing.JTextField test3Field;
    private javax.swing.JTextField test4Field;
    private javax.swing.JLabel titleLabel;
    // End of variables declaration                   

    private final Timer messageTimer;
    private final Timer busyIconTimer;
    private final Icon idleIcon;
    private final Icon[] busyIcons = new Icon[15];
    private int busyIconIndex = 0;

    private JDialog aboutBox;
}

1 个答案:

答案 0 :(得分:2)

您已将数组int[][]aryStudent = new int [5][4];的大小定义为5,并且您将从0到5(即6)

aryStudent[5][0] = Integer.parseInt(test1Field.getText());
aryStudent[5][1] = Integer.parseInt(test2Field.getText());
aryStudent[5][2] = Integer.parseInt(test3Field.getText());
aryStudent[5][3] = Integer.parseInt(test4Field.getText());

根据评论中的建议,使用ArrayListArrayList的优势在于它们的大小会动态增长,因此您无需担心最大尺寸。

或者,恕我直言的最佳方式是使用HashMap 例如:

HashMap<Integer, Integer> studentsMarks = new HashMap<Integer, Integer>();
//To insert
studentsMarks.put(//key, //value);
//To retrive
studentMarks.get(//key);