import java.util.Scanner;
class DataInput {
String name[];
int korean[], math[], english[];
int sum[];
double average[];
int students;
int rank[];
public void save() {
Scanner sc = new Scanner(System.in);
System.out.println("Type in number of students");
students = sc.nextInt();
name = new String[students];
korean = new int[students];
math = new int[students];
english = new int[students];
sum = new int[students];
average = new double[students];
rank = new int[students];
for (int i = 0; i < students; i++) {
System.out.println("Type name");
name[i] = sc.next();
System.out.println("Type Korean score");
korean[i] = sc.nextInt();
System.out.println("Type math score");
math[i] = sc.nextInt();
System.out.println("Type English score");
english[i] = sc.nextInt();
sum[i] = korean[i] + math[i] + english[i];
average[i] = sum[i]/3.0;
}
}
int stu() {
return students;
}
int[] sum() {
return sum;
}
}
class DataOutput {
DataInput data = new DataInput();
int sNum;
int[] rrank, sum;
DataOutput(int students, int[] sum) {
this.sNum = students;
this.rrank = new int[sNum];
this.sum = sum;
}
void ranker() {
int cnt = 1;
for (int i = 0; i < sNum; i++) {
for (int j = 0; j < sNum; j++) {
if (sum[i] < sum[j]) {
cnt++;
}
}
rrank[i] = cnt;
cnt = 1;
}
}
}
public class Score {
public static void main(String[] args) {
DataInput data = new DataInput();
int sNum = data.stu();
int[] sum = data.sum();
DataOutput out = new DataOutput(sNum, sum);
data.save();
out.ranker();
System.out.println();
System.out.println("Name\t\tKorean math English \t sum Average Rank");
System.out
.println("-------------------------------------------------------");
for (int i = 0; i < data.stu(); i++) {
System.out.println(data.name[i] + "\t\t" + data.korean[i] + " "
+ data.math[i] + " " + data.english[i] + "\t"
+ data.sum[i] + " " + data.average[i] + " "
+ out.rrank[i]); // this is where i get an Exception
}
}
}
그래서, 이것은 학생들의 순위를 얻는 나의 프로그램입니다. 하지만 어떻게 든 코드를 실행하면 "OutOfBoundaryException"이 계속 나타납니다. 내 코드를 확인하고 DataOutput의 새 인스턴스를 인스턴스화하면 모든 새 데이터가 만들어집니다. 그래서 생성자를 설정하여이 문제를 해결하려고했습니다. 그러나 나는 아직도이 문제를 해결할 수 없다. 나는 ranker 메소드를 DataInput 클래스에 넣을 수 있으며, 문제는 쉽게 해결할 수 있지만 실제로 DataOutput 클래스를 유지하고자한다는 것을 알고 있습니다."OutOfBoundaryException"오류를 어떻게 해결할 수 있습니까?
감사합니다.
PS : 예외는 라인 (98)에 발생되어 상기 save()
메소드가 호출 될 때까지 [I]
예외는 무엇입니까? 전체 스택 추적을 볼 수 있습니까? –