Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 与ArrayList和子类混淆_Java_Arraylist - Fatal编程技术网

Java 与ArrayList和子类混淆

Java 与ArrayList和子类混淆,java,arraylist,Java,Arraylist,因此,我试图创建一个由许多不同的自定义对象、块(基本上是一个带有额外方法的矩形)组成的arraylist创建的游戏,但我不知道我做错了什么,因为在创建对象的同时,我需要创建一个超类的对象,以使子类的对象成为子类的对象。从其他回答的问题中可以发现。我是刚接触comp sci的,需要一些帮助。提前感谢您的帮助。所以现在我正在努力在数组列表中创建所有的块,这样它们将填充JFrame。我想让JFrame一个接一个地创建每个块,但我遇到的问题是,我似乎只创建了一个,而我有一个“for”循环来创建144个。

因此,我试图创建一个由许多不同的自定义对象、块(基本上是一个带有额外方法的矩形)组成的arraylist创建的游戏,但我不知道我做错了什么,因为在创建对象的同时,我需要创建一个超类的对象,以使子类的对象成为子类的对象。从其他回答的问题中可以发现。我是刚接触comp sci的,需要一些帮助。提前感谢您的帮助。所以现在我正在努力在数组列表中创建所有的块,这样它们将填充JFrame。我想让JFrame一个接一个地创建每个块,但我遇到的问题是,我似乎只创建了一个,而我有一个“for”循环来创建144个。我意识到块现在不会正确排列,但我的目标是必须用对象污垢启动游戏,以填充数组列表。对象污垢是另一个名为block的超类中的子类。 (我写了一些我希望输入的代码,但一旦遇到这个问题,我就停止编写,所以忽略那些if和elseif语句。谢谢!)

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

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);
            }


    }
公共类MuthaLoad扩展了JPanel{
公共静态void main(字符串[]args){
JFrame窗口=新JFrame(“Muthalad”);
setContentPane(新的MuthaLoad());
窗口设置大小(600600);
窗口设置位置(100100);
window.setVisible(true);
}
私人健康指数=100;
私人整数货币=100;
private ArrayList blockWorld=new ArrayList();
私有块=新块(0,0);
私人内塔;
公共MuthaLoad(){

对于(int i=0;i您不是只创建一个块,而是在同一位置创建多个块:

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 {
    }
}
这就是为什么您实际上需要
来创建新的
污垢
。将其更改为静态嵌套类,您就不需要它了:

class Block {
    static class Dirt extends Block {
    }
}
现在您可以创建一个
新的Block.Dirt()

或者干脆创建一个新类:

// Block.java
class Block {
}

// Dirt.java
class Dirt extends Block {
}
最后,所有类都以大写字母开头。因此
block
应该是
block
dirt
应该是
dirt
。变量以小写字母开头

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

特别是在堆栈溢出方面,您会注意到基于此约定的代码示例会突出显示,因此遵循此约定可以使您的代码更易于阅读,这是一个额外的原因。

问题和文本有点冲突,可以尝试更客观地解释您的问题吗?当然,给我一分钟时间这里的实际问题是什么你的程序做了你没想到的事?我说得更清楚了,我的错