2014-02-15 23 views
0

我的目標是計算幾個已參加多個主題考試的學生的成績分數。學生記錄將被存儲在一個數組中。 請在下面找到我的代碼: 打印出學生記錄時,我能夠打印外部for循環內的所有記錄,但無法打印主題(在inner for循環內)。我收到錯誤「arrayoutofindex」。如何在Java中使用嵌套循環讀取數組中的值

package Assignment; 

import java.util.ArrayList; 
import java.util.Scanner; 

/** 
* 
* @author Administrator 
*/ 
public class Assignment { 
    // String name; 
    int totalMarks; 
    String surname; 
    String firstname; 
    int studNo; 
    String subject; 

    Assignment(String surname, String firstname, int studNo, String subject) { 
     // this.name=name; 
     // this.totalMarks=totalMarks; 
     this.firstname = firstname; 
     this.surname = surname; 
     this.studNo = studNo; 
     this.subject = subject; 
    } 

    // public String getName(){ 
    // return name; 
    // } 
    public String getSName() { 
     return surname; 
    } 

    public String getFName() { 
     return firstname; 
    } 

    public int getTotalMarks() { 
     return totalMarks; 
    } 

    public int getStudNo() { 
     return studNo; 
    } 

    public String getSubject() { 
     return subject; 
    } 

    public static boolean validSubject(String sub) { 
     return sub.matches("[1-5]"); 
    } 

    public static void main(String[] args) { 
     ArrayList<Assignment> list = new ArrayList<Assignment>(); 
     ArrayList<String> l = new ArrayList<String>(); 
     // boolean validSub = false; 
     int times; 
     // int numTimes = 1; 
     // int sub=0; 
     // int times; 
     String[] subs; 
     String sub = ""; 
     Scanner input = new Scanner(System.in); 
     System.out.print("How many students are in the class?: "); 
     int sNo = input.nextInt(); 
     int count[] = new int[sNo]; 

     String[] fname = new String[sNo]; 
     String[] sname = new String[sNo]; 
     int[] stud_No = new int[sNo]; 
     // int marks[]=new int[sNo]; 

     for (int i = 0; i < count.length; i++) { 
      System.out.printf("Student%2d:\n", i + 1); 
      System.out.print("Student Number: "); 
      int s_No = input.nextInt(); 
      System.out.print("Enter Firstname:"); 
      String f = input.next(); 
      System.out.print("Enter Surname:"); 
      String s = input.next(); 
      System.out.println("Choose one from the underlisted subjects:"); 
      System.out.println("Subjects:1. Boat Maintenance"); 
      System.out.println("\t 2. Basic sail control"); 
      System.out.println("\t 3. Blue-water Navigation"); 
      System.out.println("\t 4. Chart reading"); 
      System.out.println("\t 5. Laws & Customs of the Sea"); 
      System.out.print("How many subjects will you want to process, Maximum of 3: "); 
      int subNo = input.nextInt(); 
      int[] subj = new int[subNo]; 
      subs = new String[subNo]; 

      for (times = 0; times < subj.length; times++) { 
       System.out.printf("Subject%2d: ", times + 1); 
       // System.out.println("Subject: "); 
       sub = input.next(); 
       subs[times] = sub; 
      } 

      // } 
      // System.out.print("Enter marks in test1:"); 
      // int t1=input.nextInt(); 
      // System.out.print("Enter marks in test2:"); 
      // int t2=input.nextInt(); 
      // int m=t1+t2; 
      fname[i] = f; 
      sname[i] = s; 
      stud_No[i] = s_No; 
      // subs[i] = sub; 
      // subj[i] = sub; 
      // subj[times] = sub; 
      // subj[times] = sub; 
      // marks[i]=m; 
      list.add(new Assignment(sname[i], fname[i], stud_No[i], subs[times])); 
      // subs[times] = sub; 

     } 
     // int lowest = marks[0]; 
     // int highest = marks[0]; 
     // int counter = count[i]; 
     // 
     // for(int i=1; i< marks.length; i++) 
     // { 
     // if(marks[i] > highest) 
     // highest = marks[i]; 
     // else if (marks[i] < lowest) 
     // lowest = marks[i]; 
     // } 
     for (Assignment a : list) { 
      // if(a.getTotalMarks()==highest){ 
      // System.out.println(a.getFName() + " get the highest marks"); 
      // } 
      // if(a.getTotalMarks()==lowest){ 
      // System.out.println(a.getFName() + " get the lowest marks"); 
      // } 
      System.out.println(a.getFName() + " " + a.getSName()); 
      System.out.println("Student Number: " + a.getStudNo()); 
      System.out.println("Subjects: " + a.getSubject()); 
      System.out.println("================================="); 
      // System.out.println(subs[times]); 
     } 
    } 
} 

回答

0

你有

   subs[times] = sub; 
      subj[times]++; 

在與條件for(times=0;times<subj.length;times++)內循環,所以我想這subssubj短,並且什麼給你的例外。檢查你的條件並修改它。

0

我想,subs[times] = sub;應該是subj[times] = sub;

0

我跑你的代碼和錯誤是

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2 
    at Assignment.main(Assignment.java:113) 

那麼,什麼是該行發生了什麼?

list.add(new Assignment(sname[i],fname[i],stud_No[i],subs[times + 1])); 

這樣可以跟蹤誤差來自要麼SNAME,FNAME,stud_No或潛艇訪問一些他們的範圍。 現在您可以修改該行並重新運行,找出發生了什麼。 :)

0

ArrayOutOfBoundException將線
list.add(new Assignment(sname[i],fname[i],stud_No[i],subs[times + 1]));
因爲時間已經增加到subj.length這等於subs.length.So這裏適用,如果條件發生。