이 for 루프를 사용하면 첫 번째 주기에서 텍스트를 입력할 수 없는 이유는 무엇입니까?
-
06-07-2019 - |
문제
내가 원하는 것은 사용자에게 배열로 읽을 문자열 수를 요청한 다음 사용자에게 해당 문자열 수를 입력하여 배열로 읽어오도록 요청하는 것입니다.이 코드를 실행하면 첫 번째 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():현재 라인을 지나서 이 스캐너를 전진시키고 건너뛴 입력을 반환합니다.
제휴하지 않습니다 StackOverflow