阅读以下应用说明、图和Java代码,根据要求回答问题1至问题5。 【说明】 Stack类是java. ntil包中专门用来实现栈的工具类。以下Java程序是一个不使用库函数而实现字符串反转的程序。例如,输入:123456,则输出:654321:

admin2009-02-15  21

问题 阅读以下应用说明、图和Java代码,根据要求回答问题1至问题5。
   【说明】
   Stack类是java. ntil包中专门用来实现栈的工具类。以下Java程序是一个不使用库函数而实现字符串反转的程序。例如,输入:123456,则输出:654321:输入:asdfeg,则输出:gefdsa。
【Java程序】
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
public class UseStack extends Applet implements ActionListener
{   Stack MyStack;
   Label prompt=new Label("输入要反转字符:");
   Button pushBtn=new Button("压栈");
   Button popBtn=new Button("弹栈");         //反转
   TextField input=new TextField(5);
   int[] DrawStack =new int[10];             //记录堆栈中数据
   int[] PoppedOut=new int[20];              //记录被弹出的数据
   int StackCnt=0;                           //记录模拟堆栈的数组中的数据个数
   String msg=" ";

   public void init()
   {   MyStack=new Stack();
       add(prompt);
       add(input);
       add(pushBtn);
       add(popBtn);
       pushBtn.addActionListener(this);
         (1)  
   }

   public void paint(Graphics g)
   {   for (int i=10; i<StackCnt; i++)        //模拟显示堆栈内部的数据排列情况
       {   g.drawRect(50,200-i*20,80,20);
           g.drawString(Integer.toString(DrawStack),80,215-i*20);
       }
       for (int i=0;(2) )                  //显示被弹出的数据
           g.drawString(Integer.toString(PoppedOut),200+i*20,100);
           g.drawString("堆栈",70,236);
           g.drawString("栈底",135,225);
           g.drawString("栈顶",160,225-StackCnt*20);
           g.drawString(msg,200,140);
   }

   public void actionPerformed( (3) )
   {   if (e.getAct ionCommand () == "压栈")    //压栈操作
       {   if(StackCnt<10)
           {   MyStack.push(new Integer( (4)  ));
               DrawStack[StackCnt++]=Integer.parseInt(input.getText() );
               input.setText (" ");
           }
           else
               msg="输入数据过多,请先弹栈!"
           }
       else if (e.getActionCommand () == "弹栈") //弹栈操作
       {   if( (5) )
           {   StackCnt--;
               PoppedOut[PopCnt++]=[(Integer)(MyStack.pop())).intValue();
           }
           else
               msg="堆栈已空,不能再弹栈!";
       }
       repaint();
   }
}

选项

答案(1)popBtn.addActionListener(this); (2)i<PopCnt;i++或其等价语句 (3)ActionEvente (4)input.getText() (5)!MyStack.empty()或其等价语句

解析 这是一道要求读者掌握Java中Stack类工具应用的程序设计题。本题的解答思路如下。
   堆栈简称为栈,遵循“后进先出(LIFO)”原则。Stack是Java用来实现栈的工具类,它的主要方法如表2-16所示。本试题的Java程序是使用Stack类实现堆栈中弹栈和压栈的操作。

对于本试题,Java程序中使用输入区域input来接收用户输入的数据,并用pushBtn按钮对应的操作将该数据压入堆栈,使用popBtn按钮对应的操作将数据从栈顶弹出,所以要随时监听这两个按钮是否有操作。程序中已给出了监听pushBut按钮是否有操作的语句“pushBut.addActionListener(this);”,同理可得,要随时监听popBut按钮是否有操作,则(1)空缺处所填写的弹栈按钮监听语句是“popBtn.addAction Listener(this);”。
   本Java程序为了显示堆栈中数据排列的情况和数据弹出的情况,还定义了两个一维数组DrawStaek[  ]和PoppedOut[  ]分别记录堆栈中的数据和被弹出的数据。由于程序中己给出PopCnt是用来“记录模拟堆栈的数组中被弹H1的数据个数”等注释信息,而(2)空缺处所在的循环体是用来显示被弹出的数据。因此(2)空缺处所填写的内容是“i<PopCnt;i++”。
   (3)空缺处所填写的内容用于设置监听操作,应填写“ActionEvent e”。
   在使用压栈、弹栈操作时,压入堆栈和弹出堆栈的都是object对象或是。object子类的对象,而不是基本数据类型的数据。通常一个堆栈里可以保存不同类的对象,而本Java程序堆栈中保存的都是Integer类的对象。在压栈操作中,(4)空缺处要获取压入栈的数据,因此该空缺处应填入“input.getText()”。
   在弹栈操作中,(5)空缺处用于判断栈是否为空,若不为空,才能进行弹栈操作,因此该空缺处所填写的判断条件是“!MyStack.empty()”。
转载请注明原文地址:https://kaotiyun.com/show/dEjZ777K
0

最新回复(0)