zoukankan      html  css  js  c++  java
  • 【Java】利用二维数组进行排版

    题目:

       创建一个二维数组,将古诗《春晓》的内容赋值于二维数组。然后分别用横版和竖版进行输出

       

    -----------------------------------------------------------------------------------------------------------------------------------

    首先,我们创建一个二维数组,并将《春晓》的内容赋值给二维数组

    方法一:

     1         char a[][] = new char[4][6];
     2         String b = "春眠不觉晓,处处闻啼鸟。夜来风雨声,花落知多少。";
     3         
     4         {
     5             for (int h=0; h<=3; h++) {
     6                 for (int l=0; l<=5; l++) {
     7                     a[h][l] = b.charAt(l + 6 * h);//为什么是 l + 6 * h ,请自行摸索,懒得说了
     8                     
     9                 }
    10             }
    11         }

    通过新建 String 变量 b ,赋予古诗《春晓》为 b 的值, 再通过 for 循环遍历数组以及 String 类的 charAt() 方法对数组进行赋值

    charAt() : 可将指定索引处的字符返回

    方法二:

            char a[][] = new char[4][];
            a[0] = new char[] {'春','眠','不','觉','晓',','};
            a[1] = new char[] {'处','处','闻','啼','鸟','。'};
            a[2] = new char[] {'夜','来','风','雨','声',','};
            a[3] = new char[] {'花','落','知','多','少','。'};

    逐个赋值,量少时可行,量大时效率低下

    数组 a 的下标

    1 00 01 02 03 04 05 
    2 10 11 12 13 14 15 
    3 20 21 22 23 24 25 
    4 30 31 32 33 34 35 

    -----------------------------------------------------------------------------------------------------------------------------------

    接着,我们来输出横版

    按数组的下标看,横版输出的下标应该这样的

    1 00 01 02 03 04 05 
    2 10 11 12 13 14 15 
    3 20 21 22 23 24 25 
    4 30 31 32 33 34 35 

    每一行不变的只有数组 a 的左索引

    当右索引为 5 时,自动换行,并将左索引 +1

    左索引最大值为 3 ,最小值为 0

    右索引最大值为 5, 最小值为 0

    通过双层 for 循环遍历数组进行输出

    因为数组 a 的左索引是相对不变的

    所以,把控制数组 a 的左索引的循环写在外层 for 循环

    控制数组 a 的右索引的循环放在内层 for 循环

    方法一:

     1         {
     2             //遍历输出二维数组a
     3             //横版
     4             for (int h=0; h<=3; h++){
     5                 for (int l=0; l<=5; l++){
     6                     System.out.print(a[h][l]);
     7                 }
     8 
     9                 System.out.println();//换行
    10             }
    11         }

    方法二:

            {
                for (char k[]:a){
                    for (char e:k){
                        System.out.print(e);
                    }
                    System.out.println();//换行
                }
            }

    用 foreach 遍历数组,本质上跟方法一没什么差别

    方法三:

    极其不推荐,影响可读性

            {
                //遍历输出二维数组a
                //横版
                for (int h=0; h<=3; h++){
                    System.out.println(a[h]);//输出并换行
                }
            }

    你不说,别人很容易以为 a 是一维数组

    横版输出结果:

    -----------------------------------------------------------------------------------------------------------------------------------

    接下来看看竖版的要怎么输出

    按数组的下标看,竖版输出的下标应该这样的

    1 30 20 10 00 
    2 31 21 11 01 
    3 32 22 12 02 
    4 33 23 13 03 
    5 34 24 14 04 
    6 35 25 15 05 

    数组 a 的下标

    1 00 01 02 03 04 05 
    2 10 11 12 13 14 15 
    3 20 21 22 23 24 25 
    4 30 31 32 33 34 35 

    每一行不变的只有数组 a 的右索引

    每一行的数组 a 的左索引的数值都在递减

    当左索引为 0 时,自动换行,并将右索引 +1

    右索引最大值为 5 ,最小值为 0

    左索引最大值为 3, 最小值为 0

    通过双层 for 循环遍历数组进行输出

    因为数组 a 的右索引是相对不变的

    所以,把控制数组 a 的右索引的循环写在外层 for 循环

    控制数组 a 的左索引的循环放在内层 for 循环

            {
                for (int l=0; l<=5; l++){
                    for (int h=3; h>=0; h--){
                        System.out.print(a[h][l]);
                    }
    
                    System.out.println();
                }
            }

    这样就利用二维数组的下标对古诗《春晓》进行了横版和竖版的排版

    完整代码

    横版

            char a[][] = new char[4][];
            a[0] = new char[] {'春','眠','不','觉','晓',','};
            a[1] = new char[] {'处','处','闻','啼','鸟','。'};
            a[2] = new char[] {'夜','来','风','雨','声',','};
            a[3] = new char[] {'花','落','知','多','少','。'};
            
            {
                //遍历输出二维数组a
                //横版
                for (int h=0; h<=3; h++){
                    for (int l=0; l<=5; l++){
                        System.out.print(a[h][l]);
                    }
    
                    System.out.println();//换行
                }
            }

    竖版

            char a[][] = new char[4][];
            a[0] = new char[] {'春','眠','不','觉','晓',','};
            a[1] = new char[] {'处','处','闻','啼','鸟','。'};
            a[2] = new char[] {'夜','来','风','雨','声',','};
            a[3] = new char[] {'花','落','知','多','少','。'};
            
            {
                for (int l=0; l<=5; l++){
                    for (int h=3; h>=0; h--){
                        System.out.print(a[h][l]);
                    }
    
                    System.out.println();
                }
            }
  • 相关阅读:
    hdu1238 Substrings
    CCF试题:高速公路(Targin)
    hdu 1269 迷宫城堡(Targin算法)
    hdu 1253 胜利大逃亡
    NYOJ 55 懒省事的小明
    HDU 1024 Max Sum Plus Plus
    HDU 1087 Super Jumping! Jumping! Jumping!
    HDU 1257 最少拦截系统
    HDU 1069 Monkey and Banana
    HDU 1104 Remainder
  • 原文地址:https://www.cnblogs.com/syxy/p/9364167.html
Copyright © 2011-2022 走看看