Java 与ArrayList和子类混淆
因此,我试图创建一个由许多不同的自定义对象、块(基本上是一个带有额外方法的矩形)组成的arraylist创建的游戏,但我不知道我做错了什么,因为在创建对象的同时,我需要创建一个超类的对象,以使子类的对象成为子类的对象。从其他回答的问题中可以发现。我是刚接触comp sci的,需要一些帮助。提前感谢您的帮助。所以现在我正在努力在数组列表中创建所有的块,这样它们将填充JFrame。我想让JFrame一个接一个地创建每个块,但我遇到的问题是,我似乎只创建了一个,而我有一个“for”循环来创建144个。我意识到块现在不会正确排列,但我的目标是必须用对象污垢启动游戏,以填充数组列表。对象污垢是另一个名为block的超类中的子类。 (我写了一些我希望输入的代码,但一旦遇到这个问题,我就停止编写,所以忽略那些if和elseif语句。谢谢!) 问题:它只创建一个对象,其中一个是块,而不是对象污垢Java 与ArrayList和子类混淆,java,arraylist,Java,Arraylist,因此,我试图创建一个由许多不同的自定义对象、块(基本上是一个带有额外方法的矩形)组成的arraylist创建的游戏,但我不知道我做错了什么,因为在创建对象的同时,我需要创建一个超类的对象,以使子类的对象成为子类的对象。从其他回答的问题中可以发现。我是刚接触comp sci的,需要一些帮助。提前感谢您的帮助。所以现在我正在努力在数组列表中创建所有的块,这样它们将填充JFrame。我想让JFrame一个接一个地创建每个块,但我遇到的问题是,我似乎只创建了一个,而我有一个“for”循环来创建144个。
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();
特别是在堆栈溢出方面,您会注意到基于此约定的代码示例会突出显示,因此遵循此约定可以使您的代码更易于阅读,这是一个额外的原因。问题和文本有点冲突,可以尝试更客观地解释您的问题吗?当然,给我一分钟时间这里的实际问题是什么你的程序做了你没想到的事?我说得更清楚了,我的错