2009-11-29 4 views
0

내가하고 싶은 것은 사용자에게 배열로 읽어들이는 문자열의 수를 물어 본 다음, 그 수의 문자열을 입력하고 배열로 읽어들이도록 요청하는 것입니다. 이 코드를 실행하면 첫 번째 for-loop의 첫 번째 사이클에 "String # 0 : String # 1 :"을 인쇄 한 다음 텍스트를 입력 할 수있는 입력을 요청하지 않습니다. 왜 그런데 내가 뭘 잘못 했니?왜이 for-loop가 텍스트를 첫 번째주기에 입력하지 않습니까?

import java.util.Scanner; 

public class ovn9 
{ 
public static void main(String[] args) 
{ 
    Scanner sc=new Scanner(System.in); 

    System.out.print("Number of inputs: "); 

    int lines= sc.nextInt(); 
    String[] text=new String[lines]; 

    for(int x=0; x<text.length; x++) 
    { 
     System.out.print("String #"+x+": "); 
     text[x] = sc.nextLine(); 
    } 

    for(int y=0; y<text.length; y++) 
     System.out.println(text[y]); 

} 
} 

답변

4

버퍼링.

nextInt() 입력 개수를 입력 할 때 입력 버퍼에있는 개행을 사용하지 않습니다. for 루프의 반복 0에서는 이미 버퍼에 입력 행이 있고 nextLine()이 즉시 완료 할 수 있으며 프로그램은 반복 1에서만 새 입력 행을 기다립니다. 입력의 개행을 무시하려면 다른 행을 추가 할 수 있습니다 nextLine() for 루프를 시작하기 전에 호출하십시오.

+0

답변 : +1 –

+0

고마워요, 그 놀라운 일들. 내가 입력 버퍼에 익숙하지 않더라도 당신이 의미하는 바를 이해한다고 생각합니다. – Andreas

0

은 아마 당신은 그것은 자바 API

문자열에 의해 설명 될 수있다 'sc.next()'

for (int x = 0; x < lines; x++) { 
    System.out.print("String #" + x + ": "); 
    text[x] = sc.next(); 
} 

를 사용하도록 루프를 변경해야합니다 다음() : 발견과 다음의 완전한 토큰을 반환 이 스캐너에서.

String nextLine() :이 스캐너를 현재 줄 앞으로 이동하고 건너 뛴 입력을 반환합니다.

+0

이 답변은 저에게 잘 맞습니다. – Andreas

관련 문제