1

オブジェクトをリンク リストに入れるのに問題があります。コードは次のとおりです。

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 のスーパー クラスです。

以下は、循環型 LinkedList クラスの 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++;
}

ノードのコードは次のとおりです。 public class 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 は初めてです。何かアドバイス?

4

1 に答える 1

3

次のように変数を宣言すると-

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]);
于 2013-06-06T22:52:12.693 に答える