当前位置: 代码迷 >> Java相关 >> stack的实现
  详细解决方案

stack的实现

热度:211   发布时间:2005-05-14 10:41:00.0
stack的实现

请指正有不足的地方 import java.util.*; import java.io.*; class stack1 { public static void main(String args[]) { operate he=new operate(); int k;int y=1; DataInputStream ha1=new DataInputStream(System.in); while(y!=0) {try {he.menu(); k=Integer.parseInt(ha1.readLine()); switch(k) {case 1 :{he.enter();break;} case 2 : {he.remove();break;} case 3 : {he.display();break;} case 4 : {he.clear();break;} case 5 : {y--;break;} default :break; } } catch (Exception e) {System.out.println("---input error,please input

right order");} } } } class operate { ArrayList al=new ArrayList(); void menu() {System.out.println("-----menu of the program"); System.out.println("1).enter the value in the

stack"); System.out.println("2).remove the last value from

the stack"); System.out.println("3).display the value"); System.out.println("4).clear all the value"); System.out.println("5).exit"); System.out.print("I choose:"); } void enter() {int y=1,k; DataInputStream ha2=new DataInputStream(System.in); while(y!=0) { try { System.out.print("enter you number :"); int i; i=Integer.parseInt(ha2.readLine()); al.add(new Integer(i)); y--; System.out.println("--type 1 to enter more"); k=Integer.parseInt(ha2.readLine()); if(k==1) y++; } catch (Exception e) {} } } void remove() { int i,y=1,k; i=al.size(); if(i!=0) { DataInputStream ha3=new DataInputStream(System.in); while(y!=0) {try {al.remove(i-1); i=i-1; System.out.println("--type 1 to remove more"); k=Integer.parseInt(ha3.readLine()); if(k==1) y++; } catch (Exception e) {} } } else System.out.println("--null"); } void display() { int i; i=al.size(); if(i!=0) System.out.println(al); else System.out.println("--null"); } void clear() { al.clear();} }

搜索更多相关的解决方案: stack  

----------------解决方案--------------------------------------------------------
这个……似乎Collection里有Stack,不用自己写吧?
----------------解决方案--------------------------------------------------------
void remove()
        { int i,y=1,k;
         i=al.size();
         if(i!=0)   {
            DataInputStream ha3=new DataInputStream(System.in);
             while(y!=0)
              {try
                {al.remove(i-1);
                 i=i-1;
                 y=y-1;//写错的地方,前面的少了一个y--;sorry
                 System.out.println("--type 1 to remove more");
                 k=Integer.parseInt(ha3.readLine());
                 if(k==1) y++;
                }
               catch (Exception e)
                {}
              }         
                     }
          else System.out.println("--null");
        }
----------------解决方案--------------------------------------------------------
斑竹:
我是练习呀,我也是这个学期才开的课

----------------解决方案--------------------------------------------------------
这样啊,那你的程序最大的不足就是非线程安全,这个一般初学很难想到的,你去看看JSDK源代码里Stack的实现就知道了,要有同步代码块,在push和pop时,还有就是代码不够简洁,你最好试着自己该动一下,这样会比较有收获。
----------------解决方案--------------------------------------------------------
你的代块enter()和remove()方法中要用到线程的协作,防止线程间的互斥,不然打出来的东西就全乱了!建议1:用synchronized分别将两方法中的输入输出语句包起来!建议2:用线程协作做,这里就不多讲了,自己在网上找一下有关资料吧!
----------------解决方案--------------------------------------------------------
  相关解决方案