我试图用新对象填充对象数组。这是代码:
主要课程
scala> js.validate[LayerTreeNode]
res18: play.api.libs.json.JsResult[LayerTreeNode] = JsError(List((,List(ValidationError(error.expected.jsstring,WrappedArray())))))
董事会成员
public class Bejeweled extends JFrame{
public Bejeweled(){
Board board = new Board();
getContentPane().add(board);
board.start();
}
public static void main(String[] args){
Bejeweled game = new Bejeweled();
}
宝石类
public class Board extends JPanel{
final int BOARDHEIGHT = 8;
final int BOARDWIDTH = 8;
Gem[] gems;
public Board(){
gems = new Gem[BOARDHEIGHT * BOARDWIDTH];
}
public void start(){
fillBoard();
}
public void fillBoard(){
Arrays.fill(gems, new Gem());
for(Gem gem : gems){
System.out.println(gem.type); //**This was expected to print random numbers**
}
}
}
问题是所有对象看起来都是一样的。我知道我应该在Gem类中封装类型,但是我试图限制我在这里发布的代码量。
从主类创建一个新的Board,在Board类中,Gem []充满了新创建的Gems(类Gem)。
答案 0 :(得分:2)
Arrays.fill
使用您提供的值填充数组,在这种情况下,该值是Gem
的特定实例。相反,您需要使用for
循环并将每个数组元素设置为不同的Gem
:
for(int i = 0; i < gems.length; i++) {
gems[i] = new Gem();
}
请注意,如果你真的有一个8x8的电路板,那么Gem[8][8]
比Gem[8*8]
要好得多。