IT/JAVA

Day 5 - 배열 문제 풀이

_KH_ 2025. 1. 2. 17:30

[문제]

사용자가 얼만큼 입력할지 정하고, 값들을 저장하는데 입력한 값이 짝수면 저장안함
모두 저장되었다면 정수를 하나 더 입력받아서, 해당 번째에 저장된 정수 출력

 

[한글코딩]

/*사용자가 입력하므로 스캐너 함수 사용
	 * 같은 정수를 입력하도록 할 거고, 몇 개 입력할건지 알려줄거니까 배열 사용 int[] datas
	 * 만약(홀수를 입력하면) { 
	 *	저장한다;}
	 * datas[i] += sc.nextInt();
	 * 5를 입력 후 5개의 정수를 입력받는다
	 * 근데 만약 짝수라면 배열에 저장안됨
	 * 
	 * 몇 번째 정수를 출력하실건가요? 문구 출력하고
	 * 해당 번째 정수를 출력 (i+1)
	 * 만약 0 이하의 수를 입력하면 다시 입력해주세요! 출력하기 -> 유효성 검사 
	 * 언제 올바른 수를 입력할지 모르니 while문과 종료조건 사용
     */

 

[코드]

	  Scanner sc=new Scanner(System.in);
	      int len; // scope 이슈 해결
	      while(true) {
	         System.out.print("배열의 길이 입력 >> ");
	         len=sc.nextInt();
	         if(len>0) {
	            break;
	         }
	         System.out.println("배열의 길이는 1이상이어야만합니다! 다시입력해주세요!");
	      }      
	      int[] datas=new int[len];
	      for(int i=0;i<datas.length;i++) {
	         while(true) {
	            System.out.print((i+1)+"번째 데이터 입력 >> ");
	            datas[i]=sc.nextInt();
	            if(datas[i]%2==1) { // 종료조건
	               break;
	            }
	            System.out.println("홀수만 입력가능합니다! 다시입력해주세요!");
	         }
	      }
	      int num; // scope 이슈 해결
	      while(true) {         
	         System.out.print("몇번째 데이터를 출력할까요? >> ");
	         num=sc.nextInt();
	         if(1<= num && num<=datas.length) { // 종료조건
	            break;
	         }
	         System.out.println("배열에 존재하지않는 인덱스넘버입니다! 다시입력해주세요!");
	      }
	      for(int v:datas) {
	         System.out.print(v+" ");
	      }
	      System.out.println();
	      System.out.println(datas[num-1]);
	   }

	}

 

실행결과

 

[실제 작성한 코드]

Scanner sc = new Scanner(System.in);

		int inputNum = 0;

		while(true) {
			System.out.print("몇 개의 정수를 입력할까요? ");
			inputNum =sc.nextInt();
			if(inputNum > 0) {
				break;
			}
			System.out.println("양수를 입력해주세요!");
		}

		int[] datas = new int[inputNum];

		//while(true) {
		for(int i = 0; i < datas.length; i++) {
			System.out.print((i+1) + "번째 정수 입력");
			while(true) {
				datas[i] += sc.nextInt(); 
				if(datas[i] % 2 == 1) {
					break;
				}
				System.out.println("홀수만 입력하세요!"); 

			}
		}
		System.out.println();

		for(int v:datas) {
			System.out.print(v+" ");
		}
		System.out.println();
		System.out.println();
		int inputNum2;

		while(true) {
			System.out.print("몇 번째 정수를 출력할까요?");

			inputNum2 = sc.nextInt(); 
			// sc.nextInt(datas.length)로 설정 시 인덱스 번호는 4번까지 있는데 사용자가 5번을 입력해서 인덱스 오류

			if(inputNum2 > 0 && inputNum2 <= datas.length) {
				break;
			}
			System.out.println("올바른 수를 입력해주세요!");
		}

		System.out.println((inputNum2) + "번째 정수는 "+ (datas[inputNum2-1]) + "입니다.");
	}
}

 

출력 결과

 

 

홀수인 것만 배열에 들어갈 수 있도록 코드를 짜다가 이런 인덱스 에러가 발생했는데 알고보니 몇번째 수를 출력할지 입력받을 때 sc.nextInt(datas.length)로 작성했기 때문에 인덱스 오류가 발생한 것이었다.

컴퓨터는 인덱스 0번부터 시작하기 때문에 0,1,2,3,4번까지만 있는데 사용자가 5번째 정수를 선택해서 5를 입력하면 5번 인덱스가 존재하지 않기 때문에 인덱스 에러가 발생하는 것이다.

 

 

인덱스 에러.. 잘 관리해야 할 것 같다.