Java从控制台输入一个数n,就打印n*n的正方形.Z字形。

从控制台输入一个数n,就打印n*n的正方形,其规律如下:


第一种方法;

package org.ganhua.love;



import java.util.Scanner;


public class Main2 {
static Scanner sc = new Scanner(System.in);


public static void main(String[] args) {
boolean isRight = true;// 填数方向默认为右上 true=右
System.out.println("请输入一个整数");
n = sc.nextInt();// 输出几行
int[][] num = new int [n][n];
next(isRight, num, 0, 0, 1);
for (int i = 0; i < num.length; i++) {
for (int j = 0; j < num[i].length; j++) {
System.out.print(num[j][i] + "\t");
}
System.out.println();
}
}


private static int n;// 输入的n值


/**
* 填入下一个数
*
* @param isRight
*            下个数的填数方向 true右上 false 左下
* @param num
*            需填充的数组
* @param x
*            填的下一个数的一维坐标
* @param y
*            填的下一个数的二维坐标
* @param nextNum
*            下一个填的数字
*/
public static void next(boolean isRight, int[][] num, int x, int y, int nextNum) {


if (nextNum > n * n) {
return;
}
num[x][y] = nextNum;


if (isRight) {// 方向为右上


if (y == 0 || x == n - 1) {// x或y达到边界
isRight = false;// 改变方向为左下
}


if (x == n - 1) {// x到达边界 y
y++;
} else if (y == 0) {// x在边界内 y到达边界
x++;
} else {// 都在边界内
x++;
y--;
}
} else {// 方向为左下


if (x == 0 || y == n - 1) {// x或y达到边界
isRight = true;// 改变方向为右上
}
if (y == n - 1) {// y到达边界
x++;
} else if (x == 0) {// x在边界内 y到达边界
y++;
} else {// 都在边界内
y++;
x--;
}
}
nextNum++;
next(isRight, num, x, y, nextNum);
}

}

第二种方法:

package org.ganhua.love;


import java.util.Scanner;


public class Main3 {
static Scanner sc = new Scanner(System.in);


public static void main(String[] args) {
System.out.println("请输入一个整数");
int num = sc.nextInt();
name(num);
}


static void printArray(int[][] a) {
int rows = a.length;
int cols = a[0].length;
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
System.out.print(a[i][j] + "\t");
}
System.out.println("");
}


System.out.println("============================");
}


public static void name(int N) {
int[][] a = new int[N][N];
int count = 1;
for (int n = 0; n < 2 * N - 1; n++) {
int i = 0;
if (n < N) {
for (i = 0; i <= n; i++) {
if (n % 2 == 0) {
a[n - i][i] = count;
} else {
a[i][n - i] = count;
}
count++;
}
} else {
int counts = 2 * N - n - 1;
int c1 = 0;
for (i = n - N + 1; c1 < counts; i++, c1++) {
if (n % 2 == 0) {
a[n - i][i] = count;
} else {
a[i][n - i] = count;
}
count++;
}
}
}
printArray(a);
}


}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值