code.falcone
20
2021-09-10 16:35:39
3
114

자바 배열 크기 선언에 관한 오류 질문드립니다.


안녕하세요. 1부터 n까지 소수 구하는 문제를 풀다가 궁금증이 생겨서 질문드립니다!


boolean으로 선언한 arr 배열 크기를 200이라는 상수로 넉넉하게 잡아서 실행하면 오류가 없는데, 

아래 코드처럼 변수 n을 입력받아서 배열 크기를 n개로 잡으면 오류가 납니다... 


import java.util.Scanner;

public class Main {

	public static void main(String[] args) {     

		Scanner sc = new Scanner(System.in);
		int n =sc.nextInt();
		boolean[] arr = new boolean[n];
		for(int i=0; i<n; i++) {
			arr[i] = true;
		}
		for(int i=2; i<Math.sqrt(n); i++) {
			for(int j=i*i; j<=n; j+=i) {
				arr[j]=false;
			}
		}
		for(int i=2; i<=n; i++) {
			if(arr[i]) 
				System.out.print(i +" ");
			}
		}
		
	}
0
  • 답변 3

  • 마사키군
    1k
    2021-09-10 16:49:29

    15라인의 arr[j]가 실행될 때, for문의 j=i*i 때문에 배열의 전체 개수를 벗어나서 그런거 아닐까요?

  • 항상청춘
    315
    2021-09-10 16:56:10

    14 번 라인에 j <= n

    18번 라인에 i <= n


    이것도 ArrayIndexOutOfBoundsException 나올 수 있습니다.

  • code.falcone
    20
    2021-09-15 14:08:07

    답변 조금 늦었습니다!! 감사합니다!

  • 로그인을 하시면 답변을 등록할 수 있습니다.