要求:提示輸入一個字符串,回車後屏幕顯示字符串順序倒置後的結果。
思想:用棧進行字符串逆序。首先字母從輸入的字符串中開一個一個的提取出來,並壓入棧中,接着它們依次彈出棧,並顯示出來,因爲棧後進先出的特性,字符串的順序就顛倒過來了。
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;
}
}
運行結果: