【问题标题】:How can a user input an array of any length in java?用户如何在 java 中输入任意长度的数组?
【发布时间】:2013-11-18 08:43:47
【问题描述】:

我正在用 java 编写一个程序,要求用户输入一系列数字,例如1 2 3 4 ..,直到用户决定停止并按下回车键。通常我会做的是这样的

Scanner scan = new Scanner (System.in);    
int[] array = new int[i];    
for (int x = 0; x < i; ++x)    
{    
    array[i] = scan.nextInt();      
}    

问题是,在大多数情况下,我会有一个设定值。例如,我会问要输入多少个数字或类似的东西,然后将其存储到 i.xml 中。在这种情况下,我没有一个设定值开始。用户应该能够输入他/她想要的任意数量的数字。有什么建议吗?

我试过这个,我知道它的问题是它永远不会退出循环,但也许我在正确的轨道上或其他什么,所以无论如何我都会在这里发布它。

for (int i = 0; i < x; i++, x++)    
{    
    numbers[i] = scan.nextInt();    
    numbers = new double[x];                    
}

【问题讨论】:

  • 使用 ArrayList 而不是数组。它会根据需要自行调整大小。
  • 必须是数组吗?在这种情况下,列表似乎更明智

标签: java arrays


【解决方案1】:

在我看来,您是在说您只希望他们按一次回车即可知道何时完成。

如果是这种情况,您可以将他们的输入保存为字符串,然后使用

.split(" ");

这会将字符串分解成一个由空格分隔的字符串数组。

在此之后,您可以将字符串数组解析为 Int 数组。

【讨论】:

    【解决方案2】:

    也许数组不是您想要的。看看Java Collections

    在这种情况下,最明智的做法是 List。 List 接口有多种实现,每种都有各自的优缺点(不同操作的时间复杂度)。这也是阅读这些内容的好机会:)。

    【讨论】:

      【解决方案3】:
      ArayList<Integer> nums = new ArrayList<Integer>();
      
      nums.add(userInput);
      

      ArrayLists 会自动增加大小,因此您不必设置大小。

      要获取值,可以使用get(index)

      int n = nums.get(0);
      

      【讨论】:

        【解决方案4】:

        您需要使用集合。例如像这样:

        Scanner scan = new Scanner (System.in);
        ArrayList<Integer> numbers = new ArrayList<Integer>();
        while(true){
            int number = scan.nextInt();
            if(number == -1)
                break;
        
            numbers.add(number);
        }
        

        您还需要一种让用户停止输入数字的方法。对于此示例,当用户为数字键入 -1 时,输入将停止。根据您的上下文更改该条件。

        【讨论】:

        【解决方案5】:

        如上所述,您可以使用动态集合之一,然后使用

        转换为数组

        int[] arr = list.toArray(new int[0]);

        另请注意,该扫描仪是very slow。有几种使用 BufferedStreams 的解决方案可以实现更好的性能。上面的文章有一个。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-04-13
          • 2013-02-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-04-16
          • 2012-04-27
          • 1970-01-01
          相关资源
          最近更新 更多