토론 포럼을 앞뒤로 읽지 않고 하루 종일 고심하고 있습니다. 누구나 왜 함수 aMenu()의 두 번째 호출이 0을 반환하는지 알 수 있으며 대신 새로운 사용자 입력을 기다리지 않습니까? hasNextInt(), nextLine(), 아무 것도 작동하지 않는 등 여러 가지 시도를했습니다. 사용자가 무언가를 쓸 때까지 hasNextInt()를 차단하면 안됩니까? 이 문제를 어떻게 해결할 수 있습니까? 감사.스캐너 내부의 메서드가 응답을 기다리지 않습니다.
package FirstJavaPackage;
import java.util.Scanner;
public class testScanner
{
public static void main(String[] args)
{
int choice = aMenu();
System.out.println("You typed: "+choice);
choice = aMenu();
System.out.println("You typed: "+choice);
}
public static int aMenu()
{
int result = 0;
System.out.println("In aMenu... enter an int: ");
Scanner keyboard = new Scanner(System.in);
if (keyboard.hasNextInt())
result = keyboard.nextInt();
keyboard.close();
return result;
}
}
출력은 다음과 같습니다 ... aMenu 2 int를 입력 : 당신은 입력 :
aMenu에서이 ... int를 입력 당신은 입력 : 0
모두 감사합니다, 지금은 잘 작동을하지만, 난 여전히 논리를 얻지 않는다 완전히. 좋아, aMenu() 함수의 끝 부분에 입력 스트림을 닫고 있지만 다음 호출시 스캐너 키보드 = 새 스캐너 (System.in)를 사용하여 다시 열지 않았습니까? 그게 어떻게 일어날 수 있는지, 그리고 내가 추천 한 링크를 이미 읽었지만 나는 여전히 뭔가를 놓친 것 같아. 나중에 스트림을 닫았다가 다시 열 때 왜 작동하지 않습니까? 다시 한 번 감사드립니다. 훌륭한 커뮤니티를 만들고 있습니다! –
@xx : 한 가지로'keyboard.close()'를 호출하면'System.in'도 닫힙니다. 이 시점부터, 당신은 더 이상 스캐너를 만들지 여부에 관계없이'System.in'에서 아무 것도 읽을 수 없습니다. – NPE
고마워, 이제 알았다. 따라서 스트림이 닫히면 프로그램의 나머지 부분은 닫히고 존재하지 않는 것을 스캔 할 수는 없습니다. –