通过Java传递不同类的对象
我无法将对象放入链接列表。代码如下:通过Java传递不同类的对象,java,Java,我无法将对象放入链接列表。代码如下: if(runTypes[k]==EMPTY){ Empty creature = new Empty(); } else if(runTypes[k]==FISH){ Fish creature = new Fish(); } else if (runTypes[k]==SHARK){ Shark creature = new Shark(starveTime);
if(runTypes[k]==EMPTY){
Empty creature = new Empty();
}
else if(runTypes[k]==FISH){
Fish creature = new Fish();
}
else if (runTypes[k]==SHARK){
Shark creature = new Shark(starveTime);
}
DLinkedList.insertEnd(creature,runLengths[k]);
但是,我得到一个错误:
RunLengthEncoding.java:89: cannot find symbol
symbol : variable creature
location: class RunLengthEncoding
DLinkedList.insertEnd(creature,runLengths[k]);
^
1 error
Empty()是Fish和Shark的超级类
以下是循环链接列表类中insertEnd方法的代码:
public void insertEnd(Empty creature, int number) {
DListNode3 node = new DListNode3(creature);
head.prev.next = node;
node.next = head;
node.prev = head.prev;
head.prev=node;
node.amount = number;
size++;
}
下面是节点的代码:
公共类DListNode3{
public Empty creature;
public DListNode3 prev;
public DListNode3 next;
public int amount;
DListNode3(Object creature) {
this.creature = creature;
this.amount = 1;
this.prev = null;
this.next= null;
}
DListNode3() {
this(null);
this.amount = 0;
}
}
我不知道该怎么做,而且我是OOP新手。有什么建议吗?当您按照如下方式声明变量时-
if(runTypes[k] == EMPTY) {
Empty creature = new Empty();
}
该变量是在其中声明它的块({}
)的本地变量,并且在该块之外不可见
你想在外面用它-
DLinkedList.insertEnd(creature,runLengths[k]);
在不可见的地方。所以,编译器在抱怨
您可以执行以下操作来解决此问题-
Empty creature = null; //Empty can be the variable type, it's the parameter type in the insertEnd method
if(runTypes[k] == EMPTY) {
creature = new Empty(); //no problem, it's the same class
} else if(runTypes[k] == FISH) {
creature = new Fish(); //no problem, Fish is a subclass
} else if (runTypes[k] == SHARK) {
creature = new Shark(starveTime); //no problem, Shark is a subclass of Empty
}
DLinkedList.insertEnd(creature, runLengths[k]);
我认为您正面临变量范围问题。当您尝试使用它时,生物超出了范围。您需要在if之外声明变量,然后在if内分配它。正如其他人所说,您对变量的范围有问题。一旦您了解了这一点,也一定要检查什么类型的obj要添加到列表中的ects。似乎您要添加
空对象
、鲨鱼对象
、和鱼对象。但是,插入对象()< /Cord>方法只允许你添加<代码>空< /Cord>对象。我有两个注释/问题:<代码>空< /Cux>类代表什么?这是否应该是列表中缺少元素?如果是,则应该考虑使用<代码> null >代码>,这是用于此思想的标准java习语。说一个Shark
是一个空的有意义吗?这是帮助决定一个类是否应该扩展另一个类的典型测试。这个建议的解决方案引入了一个新问题:三个同名的独立变量。我怀疑这会解决OP向创建的列表对象添加的隐含问题从不同的班级开始编辑原始版本,但不得不在中间离开:(.但是现在它被修复了。没问题。因为您确实解决了编译器错误,所以我没有否决。但是,我们现在遇到了另一个问题:类Empty
、Fish
、和Shark
不是由OP给出的,所以我们不知道生物=新鱼()
将编译。但OP声明Empty是Fish和Shark的一个超类,对吗?如果是这样的话,那应该没有任何问题。这就是我找到的解决方案。