이 for 루프를 사용하면 첫 번째 주기에서 텍스트를 입력할 수 없는 이유는 무엇입니까?

StackOverflow https://stackoverflow.com/questions/1815396

문제

내가 원하는 것은 사용자에게 배열로 읽을 문자열 수를 요청한 다음 사용자에게 해당 문자열 수를 입력하여 배열로 읽어오도록 요청하는 것입니다.이 코드를 실행하면 첫 번째 for 루프의 첫 번째 주기에서 입력을 요청하지 않고 "String #0:문자열 #1:"라고 입력한 다음 텍스트를 입력할 수 있습니다.왜 그럴까요, 제가 뭘 잘못한 걸까요?

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]);

}
}
도움이 되었습니까?

해결책

버퍼링.

nextInt() 입력 수를 입력할 때 입력된 입력 버퍼의 개행 문자를 사용하지 않습니다.for 루프의 반복 0에서는 이미 버퍼에 입력 라인이 있고 nextLine() 즉시 완료할 수 있으며 프로그램은 반복 1에서만 새 입력 라인을 기다립니다.입력에서 줄 바꿈을 무시하려면 다른 것을 추가하면 됩니다. nextLine() for 루프에 들어가기 전에 호출하세요.

다른 팁

어쩌면 'sc.next()'를 사용하도록 루프를 변경해야 할 수도 있습니다.

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

Java API로 설명 가능

문자열 다음():이 스캐너에서 다음 완전한 토큰을 찾아서 반환합니다.

문자열 nextLine():현재 라인을 지나서 이 스캐너를 전진시키고 건너뛴 입력을 반환합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top