2013-04-18 70 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這似乎滿足你的問題,不是嗎?爲什麼不選擇這個作爲答案? –