Java 未填充数组值

Java 未填充数组值,java,arrays,java.util.scanner,Java,Arrays,Java.util.scanner,在下面的程序中,用户输入要插入的城市名称的编号,然后用该大小初始化一个字符串数组。然后我尝试迭代循环,并用从用户插入的值(城市名称)初始化数组的每个索引。 但当我试图从数组中打印值时,它要求少一个值。我的意思是,若我说城市的数量是2,那个么我的循环应该迭代两次,两次,我应该插入值,但我只能插入值一次。 调试时,我意识到第0个元素正在从某个地方自行初始化。我无法找到确切的问题 import java.util.Scanner; public class EmptyStringGenerator

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

    }
}
输出:

Delhi

第0行是“2”之后的结束行
nextInt()
不读取该值。在读取数字后添加一个虚拟的
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();

    }
String[]收藏夹城市=新字符串[scanner.nextInt()]//读整型
//使用line end,而不使用它
scanner.nextLine();
//现在读城市。
对于(int i=0;i使用
next()
方法而不是
nextLine()
。因为
nextLine()
读取
nextLine()方法跳过的
新行。

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

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

因此,代码现在将被删除

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+" ");
    }
}
publicstaticvoidmain(字符串[]ard)
{
扫描仪=新的扫描仪(System.in);
System.out.println(“有多少个城市?”);
String[]FavoriteCity=新字符串[scanner.nextInt()];

对于(int i=0;i如果我正确理解OP
问题
,输入是
int
城市名称
,输出应该是
城市名称
的次数(int),例如
2德里
输出
德里
,但他只得到
德里

解决方案
String[]收藏夹城市=新字符串[scanner.nextInt()];
字符串cityToBeAdded=scanner.next();

对于(int i=0;i)以及它应该是什么?请添加@Anuj Kumar Jha:如何在几秒钟内调试它:在调试器/IDE中遍历代码,或者在循环中添加
System.out.println(“i=“+i”);
,以查看调试时发生了什么。
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+" ");
    }
}
    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+" ");
    }