【问题标题】:Array Creation Method with a 'name' Parameter: Scope Error带有“名称”参数的数组创建方法:范围错误
【发布时间】:2018-02-02 20:00:58
【问题描述】:

我正在为一个类项目创建一些辅助方法。我想创建的方法之一是简单地创建一个 int 类型的数组,称为“name”,大小为“size”。问题出现在我尝试使用“名称”参数创建数组的方法体中。

public int[] createArray(String name, int size){

    int[] name = new int[size];

}

除了获得“变量'名称'已经在范围内定义。”错误,我认为问题是我不能在构造数组时使用变量。如果是这种情况,我不应该在这里使用“字符串名称”作为参数吗?我可以做某种解析/转换吗?最后,我必须使用/做什么才能将方法调用中的参数传递到“int[] _____ = new int[size];”?

我可能只会在 main 方法中创建我通常需要的 2 个数组,但我想知道我做错了什么。

最好的,

科里

【问题讨论】:

  • 你不能根据字符串的值来选择你的变量名。

标签: java arrays methods scope


【解决方案1】:

将变量重命名为name in

int[] name = new int[size];

int[] otherName = new int[size];

它应该可以正常工作。由于String name 用作该方法的参数,因此范围内还有另一个同名变量。

此外,如果您想使用参数来实际命名数组变量,那么您可能会尝试在其运行时修改源代码,而您不能这样做。也就是说,变量String name 在该方法中似乎不再有用了。

【讨论】:

  • 我确实想使用参数来命名数组变量,但现在我知道为什么我不能了。感谢您的回复!
  • @CoreyJones 欢迎 :) 如果这有助于将其标记为答案,以便将来也能帮助人们。
【解决方案2】:

您尝试做的事情是不可能的(除非您诉诸“反思”,我不会向相对初学者推荐)。

您想创建一个数组变量,其名称要在运行时决定。你想做类似的事情

int[] array1;
int[] array2;
createArray("array1", 17);
createArray("array2", 25);

变量名array1array2 在编译时存在。当程序运行时,它们不再可用(对于普通的 Java 代码)。您要传递给createArray() 方法的"array1""array2" 参数是字符串,Java 运行时不会将这些字符串中的字符与数组变量相关联。

您尝试实现的Java方式是:

int[] array1 = createArray(17);
int[] array2 = createArray(25);
private int[] createArray(int size) {
    return new int[size];
}

【讨论】:

  • 谢谢!我不了解变量名称以及编译时发生的事情,就像您解释它的方式一样。我也很欣赏这个解决方案。
猜你喜欢
  • 2010-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多