새 프로그래머가 있습니다. 이것은 아마도 기본적인 질문 일 텐데 그럼에도 불구하고 저를 곤두박질칩니다.스캐너 hasNextInt()가 새 입력을 요청하도록하려면 어떻게해야합니까?
내가하려고하는 것은 하나의 정수 입력을 제공하는 메서드를 작성하므로 정수가 아닌 입력을 사용하지 않고도 주 프로그램에서 해당 입력을 사용할 수 있습니다. 그러나 자체 메서드에서이를 수행하는 메서드를 작성하는 것조차 문제가있는 것처럼 보입니다.
public static int goodInput() {
Scanner input = new Scanner (System.in); //construct scanner
boolean test = input.hasNextInt(); //set a sentinel value
while (test == false) { //enter a loop until I actually get an integer
System.out.println("Integers only please"); //tell user to give me an integer
test = input.hasNextInt(); //get new input, see if it's an integer
}
int finalInput = input.nextInt(); //once i have an integer, set it to a variable
input.close(); //closing scanner
return finalInput; //return my integer so I don't have to mess around with hasNextInt over there
}
여러 수준에서 깨진 것 같습니다.하지만 그 이유는 확실하지 않습니다.
처음 입력을 요청할 때 0 또는 1과 같은 정수 값을 입력하면 루프가 완전히 건너 뜁니다. 그러나 대신 루프에 들어가서 "Integers only please"를 인쇄합니다. 더 나쁜 것은, 내가 거기에있는 동안 실제로 입력을 요구하지 않고 그 라인을 반복적으로 인쇄한다는 것입니다.
나는 후자의 문제가 아마도 토큰 문제로 인한 것임을 이해한다. 그러나 나는 그들을 어떻게 해결할 지 항상 확신하지 못한다. 닫히고 나서 스캐너를 다시 열면 Eclipse가 "복제 객체"에 버그를 일으키고 오래된 입력을 가비지에 할당합니다. 사용되지 않는 String 변수는 런타임에 "No Line was found"라고 알려주고 충분히 경험이 없습니다 새로운 의견을 얻는 다른 방법을 생각해보십시오.
한 번 해결 되었더라도 정수가있는 경우 루프를 입력하지 않도록하는 방법을 찾아야합니다. 나는 왜 정수 입력이 처음부터 루프에 들어가는 지 이해하지 못하기 때문에 이것이 어떻게 가능할 지 모르겠습니다.
도와주세요. 이것이 낡은 질문이라면 죄송합니다. 과거의 질문을 보았지만 그들 중 누구도 내가 가진 문제와 같은 문제가없는 것 같습니다.
'input.nextInt();'는 새로운 입력을 요구할 것입니다. 'input.hasNextInt();'는 사용 가능한 다음 입력을 검사하고, 따라서 true 또는 false를 반환합니다. –
@shekharsuman : 그렇다면 입력을 얻는 방법은 무엇입니까? 입력이 어떤 유형인지, 입력이 int인지, 반복이 아닌지 확인하십시오. 내 실제 루프에서 input.nextInt()를 사용했다면 비 - int 입력이 만들어져 코드가 깨져 버렸을 것이라고 나는 믿는다. –