1

Stack-structureを使用するのはこれが初めてです。基本的な考え方は次のとおりです。私は、プレイヤーがさまざまな部屋を訪れることができるテキストベースのアドベンチャーを書いています。現在、彼は戻ることができません。彼の動きを記録するためにスタックを使うかもしれないと思いました。したがって、彼が別の部屋に移動した場合、push()を使用してcurrentCity(クラスCityのオブジェクト)をスタックに配置しました。それはそのように見えます:

private Stack history;

コンストラクター内:

history = new Stack();

「go」関数の場合:

history.push(currentCity)

次のようにgoBack関数でオブジェクトを取得しようとすると、次のようになります。

currentCity = history.pop();
(currentCity is a private variable of the class I'm working in. It's of the type
City)

スタックの上のオブジェクトはCity型からのものであり、変数currentCityも同様であるため、これでうまくいくと思いました。それでも互換性のないタイプが表示されます。

どんな助けでも大歓迎です、stiller_leser

4

4 に答える 4

1

キャストするか、スタックのジェネリックパラメーターを明示的に定義する必要があります。ジェネリックパラメーターを指定することをお勧めします。

private Stack<City> history;

history.push(city);
currentCity = history.pop();
于 2013-01-20T13:31:52.313 に答える
0

あなたは良い助けのためにほとんど十分な情報を与えていません。すべての宣言を表示したり、エラーメッセージの正確なテキストを表示したりすることはありません。これは、小さな自己完結型の例が非常に簡単で有益な場合です。

pop()はほぼ確実にObjectを返します。その場合、エラーを克服するためにそれをCityにキャストする必要があります。しかし、私はここでいくつかのことを推測する必要があります...

于 2013-01-20T13:33:24.833 に答える
0

メソッドはとして宣言されてObject pop()いるため、コンパイラはObject、と互換性のない、のみを認識しCityます。を使用した場合Stack<City>は、メソッドがCity pop()あり、それが機能します。

ところでStack、時代遅れのクラス、プレコレクションフレームワークです。LinkedListを使用して、を使用することをお勧めしremoveLastますpop

于 2013-01-20T13:34:43.247 に答える
0

生の(未処理の)スタックを使用しています。型付きスタックを使用します。

private Stack<City> history;

history = new Stack<City>();

それから

currentCity = history.pop();

コンパイルされます。

于 2013-01-20T13:36:39.513 に答える