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("\n");
}

}

/**
* 螺旋展示
* @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;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM