java:利用二維數組實現將古詩詞縱向輸出.
從網絡上隨便搜索一首古詩詞,這里刻意選擇句子長短不一的詩詞
1.首先先把詩詞放進一個二維數組中.
這里將數組類型定義成char 類型,因為將其定義為String [][]poem的話輸入句子時候表達形式就要這樣寫:
這種方式顯然非常的麻煩.
String poem[][]=String [][]poem{ {"維","天","之","命",","}, {"於","穆","不","已"}, …… };
於是可以通過toCharArray()這個函數把字符串轉換為字符數組.
1 1 public class poem { 2 2 public static void main(String[] args) { 3 3 char [][]poem=new char[][]{ 4 4 "維天之命,".toCharArray(), 5 5 "於穆不已。".toCharArray(), 6 6 "於乎不顯,".toCharArray(), 7 7 "文王之德之純.".toCharArray(), 8 8 "假以溢我,".toCharArray(), 9 9 "我其收之。".toCharArray(), 10 10 "駿惠我文王,".toCharArray(), 11 11 "曾孫篤之。".toCharArray() 12 12 };
2.接下來就是思考怎么去排列的問題了,一共要循環多少次?
這里我們知道對於詞語,字數每一行並不固定,要找出最大的字數長度,也就是說循環的次數就是我們最大的字數長度.保證每一行每一個元素都被訪問到.
25 int max = 0; // 獲取最大的字數長度 26 for (int i = 0; i < poem.length+1; i++) { 27 int t = poem[i].length; // 獲取第i行的長度 28 if (t > max){ // 第i行的長度大於最大值 29 max = t; 30 } 31 }
3.通過for循環,來把數組重新排列.
32 for (int i=0;i<max;i++){ //這里代表輸出多少行 33 for (int j=arrays.length-1;j>=0;j--){ 34 // j代表的是排列前數組的行,用來判斷原來第j行的字數 35 36 if (i<arrays[j].length){ 37 System.out.print(arrays[j][i]); 38 }else{ 39 System.out.print(" "); 40 } 41 } 42 System.out.println(); 43 } 44 } 45 }
運行之后,這里都意識到一個問題,這里的詞每一行的字數都不一樣,原來是有8行7列,而豎着輸出則會有7行8列.
顯然會有一個提示出現:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 8
at zhengli.daysixarr.main(daysixarr.java:27)
原來的27行代碼稍稍修改為28行代碼,就運行正常了.
原因是因為超出了數組的空間界限,
將數組原來的長度加上1,這樣子就把原來的7行8列,'擴展'成8行8列.
27 // int t = poem[i].length; // 獲取第i行的長度 28 int t = poem[i].length+1;
運行結果:
曾駿我假文於於維
孫惠其以王乎穆天
篤我收溢之不不之
之文之我德顯已命
。王。,之,。,
, 純
.
