-5

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();
}
4

5 に答える 5

4

for(int i=0;i<=traineeMarks.length;i++)する必要がありますfor(int i=0;i<traineeMarks.length;i++)

問題は、array.length + 1 elemnt にアクセスしようとしていることです

于 2013-07-16T05:41:57.527 に答える
1

あなたの間違いはここにあります:

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

Java (およびすべての C に似た言語) のインデックスは 0 から始まるため、配列の最後のインデックスはlength-1. したがって、ループ定義を次のように修正します。

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

于 2013-07-16T05:43:01.313 に答える
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++) 
于 2013-07-16T05:48:37.940 に答える
0

これがあなたの間違いです:

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

i=0あなたはそこからそこに行くべきですtraineeMarks.length-1

for(int i=0;i<traineeMarks.length;i++)
于 2013-07-16T05:42:29.937 に答える