用java逆时针输出螺旋数字
又是上学期学c++时的遗留问题,今天想了一下竟然写了出来。这是代表我的能力有所提升吗?但明显写出的代码还是略不堪入目。
Methods
主要思路就是用两个for循环及边界判定来实现逆时针输出。
1. 首先创建n行n列的二维数组,并用两个for循环初始化为0
2. 设定变量count往数组里填数
3. 四个方向的行进,内含边界判定
难点
说是难点其实是难到我的地方,或者说是之前难想到的地方。
比如说是在右行的一段代码中,需要处理之前下行的下标变换:
for(r–, c++; c < n; c++)
这里的r–, c++是在调试中一步一步改的…
Code
还是贴一下完整的代码吧
import java.util.Scanner;
public class Lab2_4 {
public static void main(String[] args) {
int n=0;
System.out.println("请输入n:");
try {
Scanner inputn = new Scanner(System.in);
n = inputn.nextInt();
} catch (Exception e) {
// TODO: handle exception
}
// initialize
int arr[][] = new int[n][n];
for(int i=0; i<n; i++)
{
for(int j=0; j<n; j++)
{
arr[i][j] = 0;
}
}
arr[0][0] = 1;
int r=0 , c=-1, count=2;
ToShow:
for( ; count <= n*n; ){
// 下行
for(r++, c++; r<n; r++)
{
if(arr[r][c] != 0){
break;
}
arr[r][c] = count;
count++;
if(count >= n*n){
break ToShow;
}
}
//右行
for(r--, c++; c<n; c++)
{
if(arr[r][c] != 0){
break;
}
arr[r][c] = count;
count++;
}
//上行
for(c--, r--; r>=0; r--)
{
if(arr[r][c] != 0){
break;
}
arr[r][c] = count;
count++;
}
//左行
for(c--, r++; c>=0; c--)
{
if(arr[r][c] != 0){
break;
}
arr[r][c] = count;
count++;
}
}
//show
for(int i=0; i<n; i++)
{
for(int j=0; j<n; j++)
{
System.out.print(arr[i][j]+"\t");
}
System.out.println(" ");
}
}
}