与Arraylists和子类混淆

时间:2013-12-08 00:53:19

标签: java arraylist

所以我试图创建一个由许多不同自定义对象,块的arraylist创建的游戏,基本上是一个带有额外方法的矩形,但我对我做错了什么感到困惑,因为随着创建对象我需要创建一个对象用于创建子类对象的超类。从其他回答的问题中找到。我是comp sci的新手,需要一些帮助。感谢您的帮助。所以现在我正在努力在阵列列表中创建所有块,因此它们将填充JFrame。我希望JFrame一个接一个地创建每个块,但是我遇到问题的地方是,它似乎只创建一个,而我有一个' for'循环运行创建144.I意识到块现在不能正确排队,但我的目标是必须用对象污垢启动游戏,以填满数组列表。 object dirt是另一个名为block的超类中的子类。 (我写了一些我希望放入的代码,但是一旦遇到这个问题我就停止写了,所以请忽略那些if和else if语句。谢谢!)

问题:它只创建一个对象,其中包含块,而不是对象污垢。

public class MuthaLoad extends JPanel {

    public static void main(String[] args) {
        JFrame window = new JFrame("MuthaLoad");
        window.setContentPane(new MuthaLoad());
        window.setSize(600,600);
        window.setLocation(100,100);
        window.setVisible(true);

}
    private int health=100;
    private int money=100;

    private ArrayList<block> blockWorld=new ArrayList<block>();
    private block block=new block(0,0);
    private int colum;

    public MuthaLoad(){
        for(int i=0;i<144;i++){
            int random=(int)Math.random()*100;
            blockWorld.add(block.new dirt(50*i,0));
            if(i<72){

            }
            else if(random<5){

            }
            else if(random<50){
                blockWorld.add(block.new dirt(50,0));
            }
        }
    }
        public void paintComponent(Graphics g){
            super.paintComponent(g);
            for(int i=0;i<144;i++){
                blockWorld.get(i).draw(g);
            }


    }

}

1 个答案:

答案 0 :(得分:0)

您不是只创建一个块,而是在同一位置创建多个块:

int random = (int)Math.random() * 100;

问题在于:

(int)Math.random();

Math#random生成0(含)和1(不包含)之间的数字。通过转换为数据类型int,此值始终被截断为0.您的意思是:

int random = (int)(Math.random() * 100);

并且您不需要超类来实例化子类。我假设你的dirt类是这样的内部类:

class Block {
    class Dirt extends Block {
    }
}

这就是您实际需要block创建新dirt的原因。将其更改为静态嵌套类,您不需要它:

class Block {
    static class Dirt extends Block {
    }
}

现在您可以创建new Block.Dirt()

或者只是完成一个新课程:

// Block.java
class Block {
}

// Dirt.java
class Dirt extends Block {
}

最后,Java code convention是所有类都以大写字母开头。因此block应为Blockdirt应为Dirt。变量以小写字母开头。

Block block = new Block();
Dirt dirt = new Dirt();

特别是在Stack Overflow上,您会注意到代码示例会根据此约定突出显示,因此它会使您的代码更容易阅读,这是因为额外的原因。