- ベストアンサー
整数値を任意のオブジェクトを格納できるスタッククラスに格納する方法
class ObjStack { private Object[] mBuf; private int mSP; public ObjStack(int size) { mSP = 0; mBuf = new Object[size]; } public int getSize() { return mBuf.length; } public int getNum() { return mSP; } public boolean isFull() { return mSP == mBuf.length; } public boolean isEmpty() { return mSP == 0; } public void push(Object x) { if (!isFull()) { mBuf[mSP++] = x; } } public Object top() { Object obj = null; if (!isEmpty()) { obj = mBuf[mSP-1]; } return obj; } public Object pop() { Object obj = null; if (!isEmpty()) { obj = mBuf[--mSP]; } return obj; } } 上のプログラムは任意のオブジェクトを格納できるスタッククラスです。 int型の値はオブジェクトではないので、このObjyStackクラスに格納することができない。 整数値をこのObjStackクラスに格納する方法を教えて下さい。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
> よろしければ、どのように使用すればよいのか詳しく教えてくれませんか?お願いします。 例えば、 public void intPush(int intVal) { ObjStack objStack = new ObjStack(100); Integer val = new Integer(intVal); objStack.push(val); } でスタックにプッシュすることができます。 ポップする場合には、例えばこんな感じでしょうか? public int intPop() { Object obj = objStack.pop(); if (obj instanceof Integer) { return ((Integer)obj).intValue(); } }
その他の回答 (3)
-soh- さんが書かれている通りですね ご存知かと思いますが、 javaの標準APIの中にもスタックを実装したクラスは存在します。 もし、勉強の意味も含めて上記のクラスを作成しているのであれば、 JDKで配布されているソースコードを眺めるのも1つの勉強になります。。。 # こちらは、java.util.Vector クラスの拡張となっているので、 # Vectorクラスのソースも眺めることになるでしょうが 例えば -soh- さんが書かれているIntegerクラスの概要はずばり そのものですが、実際にはint型をString型にするためにchar配列を 使ったりと、パフォーマンスに関する考慮も入っています。。。
- -soh-
- ベストアンサー率27% (55/201)
おはようございます、sohです #2spoonyさんが使い方を書いてくださったので補足だけ (spoonyさんThx) Integerクラスっていうのは、貴方がお求めになっている機能 >int型の値はオブジェクトではないので、このObjyStackクラスに格納することができない。 を実現するためのクラスです。 プリミティブ型であるint型をObjectを継承しているクラスで一旦包み込む事で、Objectへのキャストを可能にします ラッパークラスのラッパーとはラッピングの意なんですね。 中身を簡単に書くと class Integer extends Object{ int intValue; Integer(int intValue) { this.intValue= intValue; } int intValue() { return intValue; } ... } みたいになっていると思われます (extends Objectなんて書いてないだろうけど解りやすいかとつけてみました) ほいであであ(^-^/~~
- -soh-
- ベストアンサー率27% (55/201)
java.lang.Integer ラッパークラスで検索どーぞ。
補足
検索していろいろ見て回ったのですが、まだ初心者なものでよく判りませんでした。 よろしければ、どのように使用すればよいのか詳しく教えてくれませんか?お願いします。