//cd c:\HPTak\Program\JavaBasic2\Stack //javac StackTry.java //set CLASSPATH=. //java StackTry //2004-09-01 StackTry追加 import java.util.*; public class StackTry { public Vector items; public static void main(String[] args) { Stack data =new StackOverride(); // StackOverride data=new StackOverride(); Vector items1=new Vector(10); items1.addElement(new Integer(1)); items1.addElement(new Integer(2)); items1.addElement(new Integer(3)); items1.addElement(new Integer(4)); items1.addElement(new Integer(5)); Vector items2=new Vector(10); items2.addElement(new String("abc")); items2.addElement(new String("d")); items2.addElement(new String("xy")); System.out.println(data.push(items1)); // System.out.println(items1.size()); OK System.out.println(data.push(items2)); Integer item1=new Integer(10); System.out.println(data.push(item1)); Vector v=data.items; System.out.println(v.size()); /* Object s=data.push(item1); この2行はOK、意味はないが。 System.out.println(s); */ /* System.out.println(items.size()); NO int len = (data.push(items2)).size(); System.out.println(len); */ // data =new Stack(); System.out.println("1番目" + data.pop()); System.out.println("2番目" + data.pop()); System.out.println("3番目" + data.pop()); } } /* import java.util.Vector; import java.util.EmptyStackException; public class Stack { private 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) */