ArrayIndexOutOfBoundsException [day03]class02 Task01

stan·2023년 5월 6일
0

에러 오류 예외

목록 보기
1/12


	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 번 입니다

profile
이진 입니다

0개의 댓글