2014-05-09 3 views
0

코드 조각을 작업 중이며 벡터를 초기화하려고합니다. 그러나 코드는 어떻게 든 첫 번째 코드를 건너 뛰고 내 벡터에 공백을 초기화했습니다. 왜 그 사람이 누군지 압니까? 여기에 내 코드의 조각이있다 :스캐너 및 for 루프

public class Test{ 
private Vector<String> vecStr; 

public void run(){ 
    vecStr = new Vector<String>(); 
    System.out.println("How many strings do you want for your string vector?"); 
    int numStr = keyboard.nextInt(); 
    System.out.println("Enter your string values."); 
    for (int i=0;i<numStr;i++){ 
    System.out.println(i + "Input"); 
    vecStr.add(keyboard.nextLine());} 
    } 
    } 
} 

이의 내가 입력 4를 가정 해 봅시다, 어떻게 든, 코드는 저를 제공합니다

0 
1 
input: 
2 
input: 
3 
input: 

그것은 0을 생략. 누군가 왜 그 일이 일어 났는지 말해 줄 수 있습니까? 그리고 Vector를 표시하려면 [ , blah, blah, blah]을 주면됩니다. 어떻게 첫 번째 요소에 공백이 있습니까?

+0

먼저 입력 한 후 예제를 실행하려고,이 코드는 출력을 인쇄 할 수 없습니다 벡터 – user3470953

+4

에 추가 우리에게 적어도 실제 출력과 실제 문제 –

+0

또는를 제공받을 우리가 제공 한 결과가 무엇인지 보여주었습니다 (포함 된 출력이 샘플 코드에서 나온 것이 아니기 때문에). – Jason

답변

2

스캐너는 줄 단위로 작동하지 않지만 토큰 단위로 작동합니다. 따라서 첫 번째 nextInt() (numStr의 경우)이 지나면 스캐너의 커서는 입력 줄의 끝 부분에 있습니다 (다음 줄이 시작되지 않음). 따라서 먼저 그 다음에 nextLine() 실행이 빈 문자열이됩니다. 이후에 nextLine()을 호출하면 올바르게 작동합니다.

+0

+1하지만 어쩌면 예가 더 명확해질 것입니다. –

+0

아, 이제 알겠습니다. 고맙습니다! – Ccyan

1
당신은 입력 스트림 리더를 사용할 수 있습니다

:

Vector<String> vecStr = new Vector<String>(); 
    BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); 
    System.out.println("How many strings do you want for your string vector?"); 
    int numStr = Integer.parseInt(reader.readLine()); 
    System.out.println("Enter your string values:"); 
    for (int i=0;i<numStr;i++){ 
     System.out.println(i + " Input: "); 
     vecStr.add(reader.readLine()); 
    } 
    System.out.println("vector contains:"); 
    System.out.println(vecStr);