2017-04-03 130 views
-2

所以,这似乎相当简单的代码。但是当我运行这个,它给了我奇怪的输出。 首先,我将queries[] Array的元素数存储在NumQ变量中。然后,我通过从0到numQ-1循环来存储元素的值。它适用于任何其他情况。为什么这个JAVA代码不能按预期工作?

int numQ=sc.nextInt(); 
    String queries[]=new String[numQ]; 
    for(int i=0;i<numQ;i++){ 

     queries[i]=sc.nextLine(); 
    } 
System.out.println(queries[0]); 
System.out.println(queries[1]); 
System.out.println(queries[2]); 

在我的情况下,输入如下─(请注意,它甚至没有在指数2.numQ是3要求的值)

enter image description here

这里是输出。

Output of the code

见,在queries[0],它存储空白值(蓝色选择为空白)。在queries[ 1 ],它存储所述第一输入端(它是要存储在索引0.And它存储索引1值在索引2等等。)

那么我的代码有什么问题。 在此先感谢:-)

+0

当使用nextInt'和'nextLine'的'组合,提防仍然有一个需要处理的缓冲区(即新线)的内容。也许使用'nextLine'并在结果上使用另一个'Scanner'来获得'numQ' – MadProgrammer

+0

我没有注意到它是与扫描仪相关的问题。并且从未发现它是重复的 – LalaByte

+0

如果您输入4 5,则按Enter键,有用。它正在拾取输入值,空白并放入。 –

回答

1

我想sc是一个扫描仪对象。方法nextInt()仅在换行之前扫描int部分。所以,你必须使用sc.nextLine()跳过换行符

int numQ=sc.nextInt(); 
sc.nextLine(); 

String queries[]=new String[numQ]; 
for(int i=0;i<numQ;i++){ 
    queries[i]=sc.nextLine(); 
} 
System.out.println(queries[0]); 
System.out.println(queries[1]); 
System.out.println(queries[2]);