在java类的main方法中通过名称访问和填充数组(通过member function创建)

时间:2019-09-09 08:34:14

标签: java arrays oop element

我有一个程序,我应该在其中创建一个具有成员函数的类,该成员函数创建不同简单数据类型的数组。我在main方法中实例化了一个类,即,我创建了该类的对象,并调用了createArray方法。当我尝试使用Arrays.fill(name,startIndex, endIndex, value)用相同类型的数据填充数组时,找不到该名称的数组。我想问你为什么?

import java.lang.reflect.Array;
import java.util.Arrays;

    public class MainClass {
      public void createArray(){
      int [] ints = new int[10];
      }
    }
    class Test{
        public static void main(String[] args) {
            MainClass mcl = new MainClass();
            mcl.createArray();
            for (int i = 0;i<10;i++){
                //cannot resolve symbol ints - why?
                Arrays.fill(ints,0,9,8);
            }
        }
    } 

4 个答案:

答案 0 :(得分:3)

您的代码存在一些问题,下面提供了一个更简单的版本:

public class MainClass {
  public void createArray(){
       //This lives only in here. It is not available outside.
       int [] ints = new int[10];
  }
}
class Test{
    public static void main(String[] args) {
        MainClass mcl = new MainClass();
        mcl.createArray();
        for (int i = 0;i<10;i++){
            //cannot resolve symbol ints - why?
            Arrays.fill(ints,0,9,8);
        }
    }
}

在您创建的代码中,ints仅存在于createArray方法中。一旦执行退出此方法,该数组将不再可用并标记为垃圾回收。

要解决此问题,您需要将方法签名更改为return类型为int的数组(这样,当您调用createArray方法时,此方法可以使您返回它创建的数组)。然后,您需要确保您捕获在主类中返回的数组。然后,您可以对其执行操作。

答案 1 :(得分:2)

如果您不想更改createArray方法签名,则可以将数组存储在class属性中并为其创建getter方法。 这是一些代码:

import java.util.Arrays;

class MainClass {

    private int[] ints;

    public void createArray(){
        this.ints = new int[10];
    }

    public int[] getInts() {
        return ints;
    }
}
class Test{
    public static void main(String[] args) {
        MainClass mcl = new MainClass();
        mcl.createArray();
        for (int i = 0;i<10;i++){
            //cannot resolve symbol ints - why?
            Arrays.fill(mcl.getInts(),0,9,8);
        }
    }
}

但是由于createArray已经公开,更好的方法可能是更改其签名以返回int[],这种情况的示例代码:

import java.util.Arrays;

class MainClass {

    private int[] ints;

    public int[] createArray(){
        this.ints = new int[10];
        return ints;
    }

}
class Test{
    public static void main(String[] args) {
        MainClass mcl = new MainClass();
        mcl.createArray();
        for (int i = 0;i<10;i++){
            //cannot resolve symbol ints - why?
            Arrays.fill(mcl.createArray(),0,9,8);
        }
    }
}

答案 2 :(得分:1)

int变量仅在createArray的范围内定义,而不在外部定义。如果需要,请把它退回。

这是一些有关Java variable scope的演讲

祝你好运。

答案 3 :(得分:1)

  1. ints不在主类的范围内,它在create数组中。您可以执行以下操作:
<div id="myAngularApp" title="Angular Scope" ng-app ng-controller="MainCtrl">
   
<div class="container">
<button id="okBtn" class="btn btn-primary" ng-click="addBackground()">ok</button> 
</div>
</div>
  1. 您必须公开Test类,因为它具有main方法,并使用Test.java保存文件
相关问题