2009-11-29 67 views
0

我想要做的就是向用户询问一些字符串来读取到一个数组,然后要求用户输入这个数字字符串,并将其读入数组。当我运行这段代码时,它永远不会要求输入第一个for循环的第一个循环,只是输出“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()不消耗输入缓冲区换行符时输入的输入数量是放在那里。在迭代0的for循环中,不过已经输入的线在缓冲区中,nextLine()可以立即完成,并计划将只在迭代1.等待新的输入行要忽略输入换行符,您可以添加又一个在进入for循环之前调用nextLine()

+0

好回答+1 :) – 2009-11-29 12:45:12

+0

谢谢你,创造了奇迹。我想我理解你的意思,尽管我不熟悉输入缓冲区。 – Andreas 2009-11-29 13:38:06

0

也许你应该改变你的循环使用“sc.next()”

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

它可以通过Java API的

字符串来解释下一个():查找并返回一个完整标记从这台扫描仪。

字符串nextLine():此扫描器的当前行,并返回跳过的输入。

+0

这适用于我,谢谢你的回答。 – Andreas 2009-11-29 13:47:15

相关问题