2013-07-16 61 views
-5

我得到java.lang.ArrayIndexOutOfBoundsException錯誤。我得到java.lang.ArrayIndexOutOfBoundsException錯誤

public class Trainee implements EvaluationDetails 
{ 
    private int traineeId; 
    private String traineeName; 
    private double traineeMarks[]; 

    public Trainee(int id,String name,double Marks[]) 
    { 
     traineeId=id; 
     traineeName=name; 
     traineeMarks=Marks; 

    } 

    public int getTraineeId() 
    { 
     return traineeId; 
    } 
    public String getTraineeName() 
    { 
     return traineeName; 
    } 

    public boolean validateTraineeMarks() 
    { 
     if(noOfCourses>0 && noOfCourses<8) 
     {  
      for(int i=0;i<=traineeMarks.length;i++) 
      { 
       if(traineeMarks[i]>0 && traineeMarks[i]<100) 
       continue; 
       else 
        return false; 
      } 
      return true; 
     } 
     else 
      return false; 
    } 

    public double calculateGPA() 
    { 
     int GPA; 
     int Cp[]=new int[7]; 
     boolean bool=validateTraineeMarks(); 
     if(bool==true) 
     { 
      for(int i=0;i<traineeMarks.length;i++) 
      { 
       if(traineeMarks[i]>=85 && traineeMarks[i]<=100) 
       Cp[i] = 5; 
       else if(traineeMarks[i]>=65 && traineeMarks[i]<85) 
       Cp[i] = 4; 
       else if(traineeMarks[i]>=0 && traineeMarks[i]<=65) 
       Cp[i] = 3; 
      } 
      GPA = //GPA calculation logic 
     } 
     else 
      { 
       System.out.println("Improper values for trainee marks"); 
       return 0.0; 
      } 

     return GPA; 
    } 
} 

的主類是如下圖所示:

public class Demo { 
public static void main(String[] args) 
{ 

    double marks[]={74.0,57.0,86.0,93.0,56.0,73.5,83.0}; 
    Trainee t = new Trainee(102,"Dixon",marks); 

    System.out.println("Trainee Id:"+t.getTraineeId()); 
    System.out.println("Trainee Name:"+t.getTraineeName()); 
    System.out.println("GPA is"+t.calculateGPA()); 
} 
} 

接口被編碼如下:

public interface EvaluationDetails 
{ 
    int creditpoints[]={3,3,4,4,2,3,5}; 
    int noOfCourses=7; 
    public double calculateGPA(); 
} 
+2

你在哪一行出錯? –

+0

哪條線獲得該異常? –

+0

你爲什麼不先使用調試器? –

回答

4

for(int i=0;i<=traineeMarks.length;i++)應該for(int i=0;i<traineeMarks.length;i++)

問題是你正在嘗試訪問array.length + 1 elemnt

+0

感謝您的幫助。 :) – RDPD

+0

@Dixon如果這是正確的答案。 [接受它](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)。 –

0

這裏是你的錯誤:

for(int i=0;i<=traineeMarks.length;i++) 

你應該去從i=0traineeMarks.length-1所以,

for(int i=0;i<traineeMarks.length;i++) 
1

你的錯誤是在這裏:在java中

for(int i=0;i<=traineeMarks.length;i++)

指數(和所有的類C語言)從0開始,因此是數組的最後一個索引是length-1。所以,固定你的循環定義如下:

for(int i=0;i<traineeMarks.length;i++)

+0

感謝您的幫助。 :) – RDPD

0

對(INT I = 0;我< = traineeMarks.length;我++)

應該是

對(INT I = 0 ;我< traineeMarks.length;我++)

+0

感謝您的幫助。 :) – RDPD

0
for(int i=0;i<=traineeMarks.length;i++) //this is wrong this cause to java.lang.ArrayIndexOutOfBoundsException 

使用

for(int i=0;i<traineeMarks.length;i++) 
相關問題