1. 程式人生 > >基於陣列的棧實現--控制檯輸入字串逆序輸出。

基於陣列的棧實現--控制檯輸入字串逆序輸出。

要求:提示輸入一個字串,回車後螢幕顯示字串順序倒置後的結果。
思想:用棧進行字串逆序。首先字母從輸入的字串中開一個一個的提取出來,並壓入棧中,接著它們依次彈出棧,並顯示出來,因為棧後進先出的特性,字串的順序就顛倒過來了。

StackX類

public class StackX {
    private int max_size;           //棧最大容量
    private char[] stackArray;
    private int top;                //棧頂下標
    public StackX(int m){           //構造方法
        max_size=m;
        stackArray=new char[max_size];
        top=-1;
    }
    public void push(char p1){     //進棧
        stackArray[++top]=p1;
    }
    public char pop(){
        return stackArray[top--]; //出棧
    }
    public char peek(){          //檢視棧頂元素
        return stackArray[top];
    }
    public boolean isEmpty(){   //判斷棧是否為空
        return (top==-1);
    }
    public boolean isFull(){   //判斷是否已滿
        return (top==max_size-1);
    }
}

Reverser類

public class Reverser {
    private String input;
    private String output;
    public Reverser(String s){
        input=s;
    }
    public String doRec(){                      //字串倒序方法
        int max_size=input.length();
        StackX s=new StackX(max_size);          //建立大小為輸入字串長度的棧
        for (int i=0;i<input.length();i++){
            char c1=input.charAt(i);
            s.push(c1);                         //迴圈入棧
        }
        output="";
        while(!s.isEmpty()){
            char c2=s.pop();                    //出棧
            output=output+c2;                   //字串拼接,可直接用"+"
        }
        return output;
    }
}

測試類RecerserApp

public class RecerserApp {
    public static void main(String args[]){
        String input,output;
            while (true) {
               System.out.println("請輸入一個字串:");
               System.out.flush();
               //flush();是流式輸入輸出常用的一個方法,表示強制請求清空緩衝區,讓i/o系統立馬完成它應該完成的輸入、輸出動作。
               input=getString();               //接收從控制檯輸入的字串
               if(input.equals("")){
                    break;
               }
               Reverser theReverser=new Reverser(input);
               output=theReverser.doRec();
               System.out.println("轉換後"+output);
            }
        }
        /*
                System.in 接受從控制檯輸入的位元組。
                new InputStreamReader(System.in);構造一個InputStreamReader物件,
                這個物件是位元組流通向字元流的橋樑:它使用指定的 charset 讀取位元組並將其解碼為字元。
                BufferedReader br=new BufferedReader(isr)的作用是:
                構造一個字元流的快取,裡面存放在控制檯輸入的位元組轉換後成的字元。
                s=buf.readLine();從這個快取中讀取一行的內容。

                通俗來說:nputStreamReader 就是一個可以從 System.in 裡面讀取東西的管道
                然後BufferedReader 就是比InputStreamReader 更高階的 更粗點的管道
                可以巢狀在InputStreamReader的外面 從而實現緩衝功能 並且可以用外層管道的readLine()方法讀取一行資料
                依次類推 一種低階位元組流管道的管道 我們可以在其外面巢狀一個更高階的資料流管道 從而更加方便的讀寫資料
         */
        public static  String getString(){
            InputStreamReader isr=new InputStreamReader(System.in);
            BufferedReader br=new BufferedReader(isr);
            String s= null;
            try {
                s = br.readLine();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return s;
        }
}

執行結果:
在這裡插入圖片描述