2014-12-21 2 views
2

를 읽을 수 없습니다 내가 좋아하는 사용자 입력을 읽을 수 : 11 12 13 14 15 16자바 스캐너는 사용자 입력

Scanner sc = new Scanner(System.in); 
    while(sc.hasNext()){ 
     System.out.println(sc.next()); 

    } 
    System.out.println("Test"); 

을하지만 새로운 while 루프 및 인쇄 "테스트"를 벗어나. 어떻게 그 입력을 읽을 수 있습니까?

+0

당신은 긴급한 것을를 입력 한 후 입력? – FlyingPiMonster

+0

예. 나는 sc.를 인쇄합니다.next()하지만 그 후에 멈추고 while 루프에서 인쇄를하지 못합니다. –

+2

특정 "종료"코드 단어를 사용하지 않고이 루프에서 벗어나지 않습니다. 'System.in'은 항상 더 많은 입력을 요구하므로'sc.hasNext()'는 항상 true입니다. – Tom

답변

1

종료 여부에 따라 루프를 해제 할 수 있습니다. 예 :

public static void main(String[] args) { 
     Scanner sc = new Scanner(System.in); 
     while(sc.hasNext()){ 
      String next = sc.next(); 

      if (next.equals("q")) { //if user press q then break the loop 
       break; 
      } 
      System.out.println(next); 

     } 
     System.out.println("Test"); 
    } 
1

사용 API를 같은 : 루프 나올 inorder를

while(sc.hasNextInt()){ 
    int aba= sc.nextInt(); 
    if (aba == 0) {//or even non numeric value here would let this loop exit 
     break; 
    } 
} 

그래서이 아닌 숫자 값을 입력 0을 입력하거나 다른 방법으로해야합니다. nextLine 메서드는 전체 라인을 한 번 읽은 다음 구문 분석을하고 정수로 변환해야하므로 sc.nextInt를 사용하면 작업을 처리 할 수 ​​있습니다.

+0

두 가지 : 변수는'abc'가 아니라'aba'라고합니다 : P. 또한 정보를 추가하여 숫자가 아닌 입력도 루프를 종료 할 수 있습니다. 따라서 종료 조건으로 '0'에 대한 검사가 필요하지 않을 수 있습니다. – Tom

+0

@Tom 감사합니다. 나는 다른 비 숫자 값을 입력하는 것에 동의하지만, 초보자와 불필요한 설명을 혼동하는 것은 좋지 않다고 생각했습니다. – SMA

2

과 같이 작동 hasNext() 방법 :이 파일의 끝을 보는 경우

  • , false를 반환;
  • 유효하지 않은 공백이 아닌 다른 입력이 있으면 true를 반환하고 그렇지 않으면 false를 반환합니다.
  • 위의 어느 쪽이든 true가 아닌 경우 사용자가 입력 할 다음 입력을 기다리고 입력 할 때까지 반환하지 않습니다. 당신이 파일을 Scanner을 사용하는 경우 파일이 명확한 끝을 가지고 있기 때문에

일반적으로, 이러한 루프는 제대로 작동합니다, 그것은 일반적으로 더 입력을 기다리는 붙어하지 않습니다.

그러나 콘솔 입력 (System.in, 리디렉션되지 않음)으로 작업하는 경우 일반적으로 사용자는 파일 끝 신호를 보내지 않습니다. 그는 단지 을 반환하고을 입력하면 hasNext()이 앉고 사용자가 다음 줄에 더 많은 입력을 입력하는지 기다립니다.

이 처리하는 일반적인 방법에는 두 가지가 있습니다

  • 사용자가 실제로 입력을 종료하는가. 당신이 돌아를 모든 번호를 입력하고 눌러 완료 한 후에는 일반적으로 Ctrl 키를D 또는 Ctrl 키를Z 인 파일 끝 시퀀스를 보내야합니다.

    이렇게하면 해당 프로그램에 더 이상 입력 할 수 없습니다.

  • 프로그램은 사용자에게 입력이 끝났음을 알리는 특정 값을 입력하라는 메시지를 표시합니다. 예를 들어, 문자열 "DONE". 당신이, 당신이 뭔가에 루프를 변경해야 그렇게 할 때 :

    String nextInput; 
    while(sc.hasNext() && ! (nextInput = sc.next()).equals("DONE")){ 
        System.out.println(nextInput); 
    } 
    
관련 문제