2017-04-03 491 views
-2

我有2个类:产品和房间。 我希望用户能够说数组有多大,创建一个Object Room并输入一个int。使用构造函数初始化数组 - Java

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

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

为什么犯规的构造函数创建一个与输入数组n,我给他? 任何想法我做错了什么?

+0

在字段中创建数组时,必须为他提供一个常量而不是变量。如果您需要声明构造函数传递的长度为N的数组,请在构造函数中进行如下操作: 'Product [] space;'是字段 'public Room(int n){this.n = n; space = new Product [n];}' – dpassy

+0

为什么要这样呢?你明确地告诉他用'n'的默认值初始化'space'。所以问题是:为什么?为什么你这样做,为什么不使用在构造函数中初始化它呢? – Tom

+0

为什么人们不满意这个问题?在java中找到newb并寻找答案,如果你无法在互联网上找到答案,这是不好的... – Karuw

回答

10

阵列被构造体之前进行初始化,当n仍然0(默认设置),因此获得一个0长度。

你需要在构造函数的身体将其初始化:

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

只是尝试

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

你不需要为额外的字段(ñ计数),只是给大小,并在构造函数中初始化数组......其余信息位于数组对象本身的内部(array.lenght等)

public class Room{ 

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

您需要初始化中的数组的构造函数。

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

否则,当你在外面做,n0默认值,并创建数组的大小为0也。基本没用。