数组值未填充

时间:2013-09-12 11:17:29

标签: java arrays java.util.scanner

在下面的程序中,用户输入要插入的城市名称的数量,然后用该大小初始化String数组。然后我尝试迭代循环并初始化数组的每个索引,并从中插入值(城市名称)用户。 但是当我尝试从数组中打印值时,它要求少一个值。我的意思是如果我说城市的数量是2,那么我的循环应该迭代两次和两次我应该插入值但是我得插入值只有一次。 在调试时,我意识到第0个元素已经从某个地方逐渐变得无法实现。我无法找到确切的问题。

import java.util.Scanner;


public class EmptyStringGenerator  {
    public static void main(String []ard)  {
        Scanner scanner = new Scanner(System.in);
        System.out.println("How many cities?");

        String[]favoriteCities = new String[scanner.nextInt()];
        for(int i=0;i<favoriteCities.length;i++){
            favoriteCities[i]=scanner.nextLine();

        }

        for(String str:favoriteCities){
            System.out.print(str+" ");
        }

    }
}

我的输入:

2
Delhi

输出:

Delhi

4 个答案:

答案 0 :(得分:2)

第0行是“2”之后的结束行。 nextInt()没有读到这一点。读完数字后添加一个虚拟nextLine()

答案 1 :(得分:2)

问题是您使用nextInt()读取了int,但不使用行结束!该行的其余部分未经处理,从那一点开始下一个nextLine()调用。

nextLine()doc

  

使此扫描程序超过当前行并返回跳过的输入。此方法返回当前行的其余部分,不包括末尾的任何行分隔符。该位置设置为下一行的开头。

要解决问题:

    String[]favoriteCities = new String[scanner.nextInt()]; //read int

    //consume line end, and do nothing with it
    scanner.nextLine();
    //now read the cities.
    for(int i=0;i<favoriteCities.length;i++){
        favoriteCities[i]=scanner.nextLine();

    }

推荐阅读:

答案 2 :(得分:1)

使用next()方法代替nextLine()。由于nextLine()会读取new line方法跳过的nextInt()
nextLine()

  

使此扫描程序超过当前行并返回跳过的输入

next()

  

查找并返回此扫描仪的下一个完整令牌

所以代码现在是

public static void main(String []ard)  
{
    Scanner scanner = new Scanner(System.in);
    System.out.println("How many cities?");

    String[]favoriteCities = new String[scanner.nextInt()];
    for(int i=0;i<favoriteCities.length;i++)
    {
        favoriteCities[i]=scanner.next();
    }

    for(String str:favoriteCities)
    {
        System.out.print(str+" ");
    }
}

答案 3 :(得分:0)

如果我正确理解OP question,则输入为intcity name,输出应为number of times (int) the city name,例如2 Delhi输出{{ 1}},但他只获得Delhi Delhi

Delhi