【问题标题】:Array value not getting populated数组值未填充
【发布时间】:2013-09-12 11:17:29
【问题描述】:

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

【问题讨论】:

  • 它应该是什么?请添加

标签: java arrays java.util.scanner


【解决方案1】:

问题是您使用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();

    }

推荐阅读:

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • @Anuj Kumar Jha:如何在几秒钟内完成调试:在调试器/IDE 中遍历代码,或者在循环中添加System.out.println("i = " + i); 以查看发生了什么。
    【解决方案3】:

    使用next() 方法代替nextLine()。因为nextLine() 读取new linenextInt() 方法跳过。
    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+" ");
        }
    }
    

    【讨论】:

      【解决方案4】:

      如果我正确理解 OP question,输入是 intcity name,输出应该是 number of times (int) the city name,例如 2 Delhi 输出 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+" ");
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-04-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-11
        • 2011-09-19
        相关资源
        最近更新 更多