无法打印数组的第一个元素

5
先生,我正在尝试打印数组的第一个元素,但是不成功。这是我的代码:
import java.util.Scanner;
public class prog3
{
    public static void main (String[] args){
        Scanner input = new Scanner(System.in);
        int size = input.nextInt();
        String arr[] = new String[size];

        for (int i=0; i<size; i++){
            arr[i]= input.nextLine();
        }

        System.out.print(arr[0]);
    }
}

当我尝试打印arr[0]时,它返回空白,但是当我打印arr[1]时,它返回第0个元素的值。请帮助我找出错误。


先生,我是Java的新手。您能解释一下原因吗? - Arka Bhattacharjee
请看我的编辑答案获取更多信息。 - kai
3个回答

5

变更

arr[i]= input.nextLine();

为了

arr[i]= input.next();

而且它可以工作。这是因为nextLine()读取了一个空格,然后看起来arr[0]是空的。你可以看到,如果size是3,你只能输入两次。有关Scanner的更多信息,请参见http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html :)

为什么这个有效?请解释一下你的答案 :) - Bart
是的,它正在工作。非常感谢您...您能否解释一下为什么nextLine()不起作用? - Arka Bhattacharjee
你确定他不想阅读包含空格的行吗?因为这将使用空格对输入进行分词。例如。 - vikingsteve

2
尝试这个吧:
    input.nextLine();   // gobble the newline
    for (int i = 0; i < size; i++) {
        arr[i] = input.nextLine();
    }

nextLine() 方法有些古怪,因为在 nextInt() 后面存在一个换行符。如果你把它吞掉,那么代码就会按照你的期望工作。 - vikingsteve

2

正确的代码: 在 input.nextInt() 后面加上 input.nextLine();

import java.util.Scanner;
public class prog3{
  public static void main (String[] args){
    Scanner input = new Scanner(System.in);
    int size = input.nextInt();
    input.nextLine();
    String arr[] = new String[size];
    for (int i=0; i<size; i++){
    arr[i]= input.nextLine();
    }
         System.out.print(arr[0]);
  }

}

输入

2
45
95

输出

45

解释:

问题出在 input.nextInt() 命令上,它只读取 int 值。因此当你继续使用 input.nextLine() 读取时,你会收到 "\n" Enter 键。所以要跳过这个,你必须添加 input.nextLine()。参考Scanner issue when using nextLine after nextXXX


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接