基於陣列的棧實現--控制檯輸入字串逆序輸出。
阿新 • • 發佈:2018-12-27
要求:提示輸入一個字串,回車後螢幕顯示字串順序倒置後的結果。
思想:用棧進行字串逆序。首先字母從輸入的字串中開一個一個的提取出來,並壓入棧中,接著它們依次彈出棧,並顯示出來,因為棧後進先出的特性,字串的順序就顛倒過來了。
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; } }
執行結果: