java:利用数组实现将古诗词纵向输出

 

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;    

运行结果:

曾骏我假文於於维
孙惠其以王乎穆天
笃我收溢之不不之
之文之我德显已命
。王。,之,。,
 ,  纯   
    .   
原文地址:https://www.cnblogs.com/Ansonrelovisa/p/5939989.html