java关于输出n*n的序列问题

要求实现下面的效果:

输入5:

输出结果为:

   1   2   3   4  5
 16 17 18 19  6
 15 24 25 20  7
 14 23 22 21  8
 13 12 11 10  9

 

输入6:

输出结果为:

   1   2   3   4   5  6
 20 21 22 23 24  7
 19 32 33 34 25  8
 18 31 36 35 26  9
 17 30 29 28 27 10
 16 15 14 13 12 11

 

代码实现如下

import java.util.Scanner;
/**
 * @description 实现功能见运行结果
 * @author srong
 * @version 1.0 2011-9-9
 */
public class TestNum {
 public static void main(String[] args) {
  //定义标准输入流,与System.in关联
  Scanner in = new Scanner(System.in);
  System.out.println("请输入一个任意大于0的整数(若输入的值是大于0的小数,则只取整数舍去小数):");
  //定义用户输入的值,用户可以输入小数,整数,但是num只存取整数值
  //尚未控制不允许输入字符,如果输入字符后台会抛错
  int num = (int)in.nextDouble();
  //定义一个num长num宽的二维数组
  int numbers[][] = new int[num][num];
  int i = 0;//i控制循环次数
  int k = 0;//k控制行
  int j = 0;//j控制列
  int temp = 0;//temp存放当前得到的值
  //判断num的值是否大于0
  if (num > 0) {
   //num*num是在整个矩阵最中心的位置,而得到这个值是在最后才得到的,并且通过众多的举例可得到共循环num/2+1次
   for (; i < num / 2+1; i++) {
    //因为整个矩阵是按行列循环,每循环完一个正方形,行列的的下标相等
    k = i;
    for (j = i; j < num - i; j++) {//按从左到右,计算每行的各值
     temp = temp + 1;
     numbers[k][j] = temp;
    }
    //从左到右,每行的最后一个值得到后,则列下标不变,行下标加1
    k ++;
    for (; k < j; k++) {//从上到下,计算每列的各值
     temp = temp + 1;
     numbers[k][j - 1] = temp;
    }
    //从上到下,每一列的最后一个值得到后,则行下标不变,列下标减1
    k = j - 1;
    for (j = j - 2; j > i - 1; j--) {//从右到左,计算每行的各值
     temp = temp + 1;
     numbers[k][j] = temp;
    }
    //从左到右,每一行的最后一个值得到后,则列下标不变,行下标依次减1
    j = j + 1;
    k = k - 1;
    for (; k > i; k--) {//从下到上,计算每列的各值
     temp = temp + 1;
     numbers[k][j] = temp;
    }
   }
   //格式化数据二维数据的值
   for (i = 0; i < num; i++) {
    for (j = 0; j < num; j++) {
     System.out.printf("%3d", numbers[i][j]);
    }
    System.out.println();
   }
  } else {
   System.out.println("输入的数据不合法!");
  }
 }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值