【问题标题】:In Java, how can I pass an array directly as a parameter to a function?在Java中,如何将数组作为参数直接传递给函数?
【发布时间】:2020-10-27 15:04:23
【问题描述】:

我正在处理一个 Java 项目,并且有许多由不同脚本生成的数组(例如 {1、2、3、5})。

我在记事本中有这些数组,并希望将它们直接传递给一个函数,该函数会将它们放入 HashMap 形式的 hasmap 中。这些 Hashmaps 将随后被放置在另一个 hashmap 中。

现在我编写了一个函数,它接收创建更大哈希所需的参数(因此是 Hashmap>),它将 Int、String 和 Int[] 作为函数参数。

我的问题是,Java 希望我先组成一个 Int[](例如 array_of_numbers1 = {1, 2, 3}),然后才允许我将该 Int[] 作为参数传递给创建 HashMap 的函数。

我有什么方法可以直接执行此操作,而无需先创建一个 Int[] 变量,然后再将其传递给函数?那么直接将数组传入函数调用中?

我希望我的函数调用看起来像(我的函数是:Public Void AddElement(Int, String, Int[]))

AddElement(1, "Numbers1", {1,2,3}) 等。 这种传递参数的方式是否可行?是否可以以不同的方式完成,以便我仍然可以使用列表或数字序列,它们将一起放置在数组中(在函数中),这样我就不必先初始化 Int[] 数组(比如 AddElement(1, "Numbers1", 1, 2, 3,.... 可能有更多的数字))?

我得到的错误是“此处不允许使用数组初始化程序”。可以做些什么来解决这个问题? 提前致谢!

【问题讨论】:

  • 你想要可变参数。 int... exint[] ex 的语法糖,但允许您使用参数列表的末尾作为数组输入,例如callMethod(1, 2, 3)

标签: java arrays function parameter-passing


【解决方案1】:

语法是:

AddElement(1, "Numbers1", new int[]{1,2,3})

——

只有在声明变量/字段时才能使用简写形式,例如

int[] myArray = {1, 2, 3};

【讨论】:

  • 这解决了我的问题!非常感谢!我已经有点绝望了,因为我意识到如果不声明数组的类型,它将永远不会被接受,但这正是我需要做的!再次感谢,我猜这个问题可以关闭。多么棒的网站啊,有快速的帮助!
【解决方案2】:

使用您选择的数字初始化数组的标准形式是:

new int[] {1,2,3},例如:

addElement(5, "Hello", new int[] {1, 2, 3});

您可以省略其中的 new int[] 部分,但前提是您将此表达式用作新字段或变量声明的初始值,而不是在传递给方法调用时:

int[] example = {1, 2, 3};.

如果您将方法参数设为“varargs”,则可以传递无限数量的 int 参数。您可能正在寻找这个:


public void addElement(int rowKey, String columnKey, int... values) {
    map
        .computeIfAbsent(rowKey, r -> new HashMap<>())
        .computeIfAbsent(columnKey, c -> new HashMap<>())
        .put(values);
}

addElement(5, "Hello", 1, 2, 3);

在某些 IDE 中,您可能会在此处收到警告,它试图说明如果有人创建了一个数组,并使用它来调用 varargs 方法,他们稍后可以更改该数组,这会更改您的地图存储中的数组:

int[] example = {1, 2, 3};
addElement(5, "Hello", example);
example[0] = 6;
System.out.println(getElement(5, "Hello")[0]);
// prints 6 - that may not be what you want

如果你不喜欢这个;在 addElement 方法中复制数组:.put(Arrays.copyOf(values));

请注意,如果您也使用int[],也会出现此问题;它只是假设你如果写int[]就知道它,所以大多数IDE不会生成警告。

【讨论】:

    【解决方案3】:

    我希望我的函数调用看起来像(我的函数在哪里:Public Void AddElement(Int, String, Int[]))

    AddElement(1, "Numbers1", {1,2,3})

    使用可变参数。

    public void addElement(int i, String s, int... values)
    
    addElement(1, "Numbers1", 1, 2, 3);
    

    varargs 参数只能有一个,并且必须是最后一个参数。

    另外,请注意代码中几乎所有单词都以小写字母开头。问题中的代码不是 Java。

    【讨论】:

      猜你喜欢
      • 2012-12-07
      • 2020-05-13
      • 1970-01-01
      • 2013-01-27
      • 1970-01-01
      • 2012-07-26
      • 2016-02-07
      • 2013-01-20
      相关资源
      最近更新 更多