• java实现:二维数组螺旋打印输出


                                               

    朋友出的一道算法题,大概意思是:输入任意一个数n,用二维数组打印出螺旋图案(如上左图,输入5),

    我自己的主要思想是分层,由外向内,一圈为一层,然后每层又分为上右下左(top-right-bottom-left)四个方向,每个方向单独画。

    过程中遇到的问题:

    1.啥时候结束循环?

      当(sum-1)=(n*n)时。

    2.结束循环的条件判断需要在哪儿写?

      刚开始我就在循环体最后面写的,然后就一直抛异常了(哎,心累),后来我就在每个方向画完后,就写了个结束循环的判断。

    来直接上代码了(简单实现了下):

    public static void main(String[] args) {
    int n = 5;
    int a[][] = luoxuan(n);
    for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
    System.out.print(" " + a[i][j] + " ");
    }
    System.out.println(" ");
    }

    }

    /**
    * 螺旋展示
    * @param n 任意数,负数默认为1.
    * @return
    */
    private static int[][] luoxuan(int n) {
    if (n <= 0) {
    n = 1;
    }
    int a[][] = new int[n][n];
    int top = 0, bottom = n - 1;//上下
    int left = 0, right = n - 1;//左右
    int i = top, j = left;
    int sum = 1;
    while (true) {
    //上
    while (j != right + 1) {
    a[i][j] = sum;
    sum++;
    j++;
    }
    j--;
    if ((sum - 1) == (n * n)) {
    break;//退出条件
    }
    top++;
    i = top;

    //右
    while (i != bottom + 1) {
    a[i][j] = sum;
    sum++;
    i++;
    }
    i--;

    if ((sum - 1) == (n * n)) {
    break;
    }
    right--;
    j = right;
    //下
    while (j != left - 1) {
    a[i][j] = sum;
    sum++;
    j--;
    }
    j++;
    if ((sum - 1) == (n * n)) {
    break;
    }
    bottom--;
    i = bottom;
    //左
    while (i != top - 1) {
    a[i][j] = sum;
    sum++;
    i--;
    }
    i++;
    if ((sum - 1) == (n * n)) {
    break;
    }
    left++;
    j = left;
    }
    System.out.println("n="+n+",i=" + i + ",j=" + j + ",sum=" + sum);
    return a;
    }
    万物皆有裂痕,那是光进来的地方。
  • 相关阅读:
    计算机网络-数据结构-MAC帧头-IP头-TCP头-UDP头
    (考研)java网络编程
    多态(重点:方法的多态性和对象的多态性)
    JZOJ1497 景点中心 题解
    JZOJ1227 Coprime 题解
    JZOJ3966 Sabotage 题解
    JZOJ3056 数字 题解
    JZOJ3054 祖孙询问 题解
    【Luogu P2282】【JZOJ 4906】【NOIP2016提高组复赛】组合数问题 题解
    JZOJ4316【NOIP2015模拟11.5】Isfind 题解
  • 原文地址:https://www.cnblogs.com/VweiweiyixiaoV/p/6292974.html
Copyright © 2020-2023  润新知