Question

This is the beginnings of a program that organizes students and their grades from four different classes. Eventually I'll be adding averages and what-not. At the moment however I have a problem with outputting the grades in the 'studentListField' -- see below...after the 'addButton'. I'm pretty new to java and this particular program (netbeans) I'm using to build this, hence why I'm asking for guidance and help.**

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;
}
Was it helpful?

Solution

You have defined the size of your array int[][]aryStudent = new int [5][4]; to be 5 and you are going from 0 to 5 (which is 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());

As suggested in the comments, use an ArrayList. The advantage with an ArrayList is that they dynamically grow in size so you don't have to worry about the maximum size.

Or, the best way IMHO, would be to use a HashMap Example:

HashMap<Integer, Integer> studentsMarks = new HashMap<Integer, Integer>();
//To insert
studentsMarks.put(//key, //value);
//To retrive
studentMarks.get(//key);
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top