2013-04-18 72 views
0

这是组织学生及其四个班级成绩的计划的开始。最终我会添加平均值和不是。目前,我在'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; 
} 
+0

为什么不通过现场使用的ArrayList 和获得的成绩?每个学生都有一个成绩......看起来像是一个完美的上课地点。 –

回答

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); 
+0

OP这似乎满足你的问题,不是吗?为什么不选择这个作为答案? –