모범 코드의 오류;;;;

빠요엔 님들 사이에서 코드올리기가 싫었는데 이거는 제가 작성한 코드가 아니니까 부담이 덜되네요.
그리고 JAVA 카테고리없는거 처음암;;;도데체 코톡님들 자바 왤케 싫어해유…

어제 간단히 cows and bulls를 만들었습니다.
꽤 멀쩡하게 작동해서 기분좋았는데 제가 만든 코드랑 인터넷에 올라오는 모범 코드랑 비교해보고 싶어져서 소스코드를 찾았습니다.
과연 오래된 문제라서 어썸해 보이는 코드들이 많았는데 그중에서 하나를 골라 한번 테스트를 해봤습니다. 그런데 예외가 발생합니다.

NoSuchElementException
알아보니까 Scanner object가 없는 상황에서 값을 입력받으면 생기는 예외라고 하네요.

import java.util.InputMismatchException;
import java.util.Random;
import java.util.Scanner;
 
public class BullsAndCows{
	public static void main(String[] args){
		Random gen= new Random();
		int target= 0;
		while(hasDupes(target= (gen.nextInt(9000) + 1000)));
		String targetStr = target +"";
		boolean guessed = false;
		Scanner input = new Scanner(System.in);
		int guesses = 0;
		do{
			int bulls = 0;
			int cows = 0;
			System.out.print("Guess a 4-digit number with no duplicate digits: ");
			int guess;
			try{
				guess = input.nextInt();
				if(hasDupes(guess) || guess < 1000) continue;
			}catch(InputMismatchException e){
				continue;
			}
			guesses++;
			String guessStr = guess + "";
			for(int i= 0;i < 4;i++){
				if(guessStr.charAt(i) == targetStr.charAt(i)){
					bulls++;
				}else if(targetStr.contains(guessStr.charAt(i)+"")){
					cows++;
				}
			}
			if(bulls == 4){
				guessed = true;
			}else{
				System.out.println(cows+" Cows and "+bulls+" Bulls.");
			}
		}while(!guessed);
		System.out.println("You won after "+guesses+" guesses!");
	}
 
	public static boolean hasDupes(int num){
		boolean[] digs = new boolean[10];
		while(num > 0){
			if(digs[num%10]) return true;
			digs[num%10] = true;
			num/= 10;
		}
		return false;
	}
}

예외는 20번째줄

guess = input.nextInt();

에서 발생합니다. 그런데 문제는 이 예외가 생기는 이유가 도통감이 안잡힙니다.
일반적으로 input을 close했을때 생가는 예외라는데 거기에 해당하는 코드가 전혀 없는 데도 불구하고 해당 예외가 발생합니다.
왜 이러한 예외가 발생했는지 알려주시면 매우 감사하겠습니다.

다른것들에 밀려서 리스트에 안나오는것 뿐입니다. 그리고, 자바는 사랑입니다.

그리고 항상 API 도큐먼트를 믿고 가셔야 합니다.

다 사람이 하는 건데, 완벽할순없죠 :slight_smile: .

2 Likes

확실히 말투가 많이 가시돋쳤네요. 다음부턴 주의하겠습니다…

죄송하지만 여전히 이유를 모르겠네요…
이전에 사용했던 코드들도 nextInt method들을 잘 사용했는데…이상하게 새로 만드는 코드들이 모두 이모양입니다. 입력값이 소진되었다는 뜻이 정확히 어떤 뜻인지 이해가 가지 않습니다.ㅠ

으윽 자바는 죄악입니다

1 Like

짐작으로는, 루프가 문제가 아닌가 싶은데요. 언제 에로가 나는지 범위를 좁힌후 디버깅을 해 보세요.

어디서 맛있을것같은 자바:heart: 냄새가?!???!!!