int blwAvg = 0;
for(int i=0;i<stu.length;i++) {
if(stu[i] < avg) {
blwAvg++;
}
}
System.out.println(blwAvg);
int[] blwAvgNo = new int[blwAvg];
for(int i =0;i<stu.length;i++) {
if(stu[i]<avg) {
blwAvgNo[i] = (i+1);
}
}
평균점수를 넘기지 못한 학생들의 번호(Xxindex아님xX)를 배열에 저장후 기억 하기 위하여 우선
blwAvg라는 변수에 배열길이를 정하기 위한 카운트를 함.
그 카운트를 이용하여 int[ ] blwAvgNo라는 배열을 생성 후 for문으로 평균점수(avg)밑의 index+1 (학생번호)를 저장 하려고 하였다.
여기서 ArrayIndexOutofBoundsException 이라는 에러가 발생.
왜냐하면 for문의 i는 기존의 모든 학생들을 저장 해둔 stu[ ]라는 배열의 index를 가르키고 있기 때문.
blwAvgNo[i] = (i+1); 라고 새로운 배열에 기존 배열의 인덱스 가르키는 i로 저장 을 하려고 할 경우
이런식으로 i = 3 (index 3, 학생번호 4)에서 부터 새로운 배열 blwAvgNo[ ]의 길이를 벗어나고 에러가 발생
int j=0;
for(int i =0;i<stu.length;i++) {
if(stu[i]<avg) {
blwAvgNo[j++] = (i+1);
}
}
이렇게 새로운 배열의 index를 트래킹할 j라는 변수를 따로 생성 해 주어야 한다
System.out.print("평균을 못넘긴 학생들의 번호는 ");
for(int i =0; i<blwAvgNo.length;i++) {
System.out.print( blwAvgNo[i]+" ");
}
System.out.print("번 입니다");
}
그리고 다시 이렇게 반복문으로 배열을 출력 해 준다.
결과 :
평균을 못넘긴 학생들의 번호는 1 3 4 번 입니다