[문제]
사용자가 얼만큼 입력할지 정하고, 값들을 저장하는데 입력한 값이 짝수면 저장안함
모두 저장되었다면 정수를 하나 더 입력받아서, 해당 번째에 저장된 정수 출력
[한글코딩]
/*사용자가 입력하므로 스캐너 함수 사용
* 같은 정수를 입력하도록 할 거고, 몇 개 입력할건지 알려줄거니까 배열 사용 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번 인덱스가 존재하지 않기 때문에 인덱스 에러가 발생하는 것이다.
인덱스 에러.. 잘 관리해야 할 것 같다.
'IT > JAVA' 카테고리의 다른 글
Java Section 02 : 변수와 자료형 (0) | 2025.01.03 |
---|---|
Java Section 01 : 자바 프로그래밍의 기본 (2) | 2025.01.02 |
CodeUp - 1228 : 비만도 측정 1 (0) | 2025.01.01 |
Day 4 - 반복문(for) 예제 풀이 (0) | 2024.12.31 |
[JAVA] 정수 2개를 입력받고 랜덤수 3개 출력하기 (0) | 2024.12.31 |