【问题标题】:Initialise Array with Constructor - Java使用构造函数初始化数组 - Java
【发布时间】:2017-08-28 06:10:30
【问题描述】:

我有 2 个课程:产品和房间。 我希望用户能够通过创建 Object Room 并输入 int 来说出数组的大小。

public class Room{
  private int n;
  private int count = 0;
  Product [] space = new Product[n];

public Room(int n){
  this.n = n;
}

为什么构造函数不使用输入n创建数组,我给他? 任何想法我做错了什么?

【问题讨论】:

  • 在字段中创建数组时,您必须为他提供一个常量,而不是变量。如果您需要声明构造函数传递的长度为 N 的数组,请在构造函数中执行如下操作:Product [] space; 是字段 public Room(int n) {this.n = n; space = new Product[n];}
  • 为什么要这样?你明确地告诉他用默认值n初始化space。所以问题是:为什么?你为什么这样做,为什么不使用在构造函数中初始化它?
  • 为什么人们不赞成这个问题?如果您在互联网上找不到答案,那么成为 java 新手并寻找答案是不是很糟糕...

标签: java arrays object constructor


【解决方案1】:

您需要在构造函数内部初始化数组。

public Room(int n) {
    this.n = n;
    this.space = new Product[n];
}

否则,当您在外面执行此操作时,n 的默认值为 0,并且创建的数组的大小也是 0。基本没用。

【讨论】:

    【解决方案2】:

    您不需要额外的字段(ncount),只需给出大小,然后在构造函数中初始化数组...其余信息是数组对象本身的内部(array.lenght 等)

    public class Room{
    
      Product [] space;
      public Room(int n){
          space = new Product[n]
      }
    }
    

    【讨论】:

      【解决方案3】:

      试试吧

      public Room(int n){
        this.n = n;
      this.space = new Product[n];
      }
      

      【讨论】:

        【解决方案4】:

        数组在构造函数体之前初始化,当n仍然是0(默认),所以它得到一个0长度。

        您需要在构造函数的主体中对其进行初始化:

        public Room(int n){
            this.n = n;
            this.space = new Product[n];
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-08-02
          • 1970-01-01
          • 2021-03-26
          • 2011-06-17
          • 1970-01-01
          • 2017-08-16
          • 1970-01-01
          • 2011-06-12
          相关资源
          最近更新 更多