//cd c:\JavaTry\Book-JavaTutorial\javaOO\example //set CLASSPATH=. //javac Stack.java //java Stack import java.util.Vector; import java.util.EmptyStackException; public class Stack { // private Vector items; public Vector items; public Stack() { items = new Vector(10); } public Object push(Object item) { items.addElement(item); return item; } public synchronized Object pop() { int len = items.size(); Object obj = null; if (len == 0) throw new EmptyStackException(); obj = items.elementAt(len - 1); items.removeElementAt(len - 1); return obj; } public boolean isEmpty() { if (items.size() == 0) return true; else return false; } } /* //2004-08-26 Mytry 追加 public static void main(String[] args) { Stack data =new Stack(); Vector items=new Vector(5); items.addElement(new Integer(1)); items.addElement(new Integer(2)); items.addElement(new Integer(3)); items.addElement(new Integer(4)); items.addElement(new Integer(5)); System.out.println(data.push(items)); Integer item=new Integer(10); System.out.println(data.push(item)); System.out.println("1番目" + data.pop()); System.out.println("2番目" + data.pop()); System.out.println("3番目" + data.pop()); } } エラー経過 1 public static void main(String[] args) { int items[]={1,2,9,7}; Stack data =new Stack(); int item[]={10,20,90,70}; System.out.println(data.push(item).toString()); } } これでは、下記のようになるので、mainを独立させたが、同じこと。 C:\JavaTry\Book-JavaTutorial\javaOO\example>java Stack Exception in thread "main" java.lang.NoSuchMethodError: main 2 public static void main(String[] args) { と、staticをいれて解決。staticが必須か? しかし、 C:\JavaTry\Book-JavaTutorial\javaOO\example>java Stack [I@131f71a と意味不明の出力。 3 一項だけのオブジェクトデータでトライ Integer item=10; または、 Integer item=(int)10; とするが、いずれも失敗。 Stack.java:42: 互換性のない型 検出値 : int 期待値 : java.lang.Integer 4 Integer item=new Integer(10); でやっと、10を出力。 5 1番目10、2番目1を期待して、popの出力を並べるが、 Exception in thread "main" java.util.EmptyStackException at Stack.pop(Stack.java:25) at Stack.main(Stack.java:45) int items[]={1,2,9,7};とするだけでは、pushされていないこと に気づく。 6 public static void main(String[] args) { Stack data =new Stack(); int items[]={1,2,9,7}; Integer item=new Integer(10); System.out.println(data.push(items)); System.out.println(data.push(item)); System.out.println("1番目" + data.pop()); System.out.println("2番目" + data.pop()); System.out.println("3番目" + data.pop()); } } System.out.println(data.push(items)); を追加。 [I@131f71a 10 1番目10 2番目[I@131f71a で失敗。 8 items.addElement(new Integer(1)); などう羅列して、ようやく、Vectorの処理はできた。このやり方は、「Javaの基礎」のやり方に同じ。Collectionを使う方法など、もっとスマートややり方があるはず。 [1, 2, 3, 4, 5] 10 1番目10 2番目[1, 2, 3, 4, 5] Exception in thread "main" java.util.EmptyStackException at Stack.pop(Stack.java:25) at Stack.main(Stack.java:52) */