2

在下面的程序中,用户输入要插入的城市名称的数量,然后使用该大小初始化一个字符串数组。然后我尝试遍历循环并使用从用户插入的值(城市名称)初始化数组的每个索引。但是当我尝试从数组中打印值时,它要求少一个值。我的意思是,如果我说城市的数量是 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

4 回答 4

2

第 0 行是“2”之后的结束行。nextInt()不读那个。nextLine()读取数字后添加一个假人。

于 2013-09-12T11:22:34.210 回答
2

问题是您使用nextInt()读取 int ,但不要消耗行尾!该行的其余部分未处理,下一个nextLine()调用从该点继续。

nextLine() 文档

将此扫描器前进到当前行并返回被跳过的输入。此方法返回当前行的其余部分,不包括末尾的任何行分隔符。位置设置为下一行的开头。

要更正此问题:

    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();

    }

推荐阅读:

于 2013-09-12T11:23:39.853 回答
1

使用next()method 而不是nextLine().SincenextLine()读取new line被 method 跳过的内容nextInt()
下一行()

将此扫描器前进到当前行并返回被跳过的输入

下一个()

从此扫描器中查找并返回下一个完整令牌

所以现在的代码

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+" ");
    }
}
于 2013-09-12T11:25:20.137 回答
0

如果我正确理解 OP question,输入是intand city name,输出应该是number of times (int) the city name,例如2 Delhioutput Delhi Delhi,但他得到的只是Delhi

解决方案

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

    }

    for(String str:favoriteCities){
        System.out.print(str+" ");
    }
于 2013-09-12T11:38:33.583 回答