對於二維數組 1,2,3
4,5,6
7,8,9
紅色部分代表一個回行,目標是輸出按照順時針方向,先輸出紅色的,再輸出黑色的。
我的思路是:先輸出外圈,再輸出裏圈。每一圈,都有一個開始和一個結束,所以打印每一行的時候都需要給一個開始的地方(startX,startY)和一個結束的地方(endX,endY).
private static void printRC(int [][]matrix,int startX,int startY,int endX,int endY){
boolean isRow=startX==endX;
boolean isRise=isRow?startY<endY:startX<endX;
if (isRow){
if (isRise) {
for (int i=startY;i<=endY;i++) {
System.out.print(matrix[startX][i]+" ");
}
}else{
for (int i=startY;i>=endY;i--) {
System.out.print(matrix[startX][i]+" ");
}
}
}else{
if (isRise) {
for (int i=startX;i<=endX ;i++){
System.out.print(matrix[i][startY]+" ");
}
}else{
for (int i=startX;i>=endX ;i-- ) {
System.out.print(matrix[i][startY]+" ");
}
}
}
}
public static void printD(int a[][],int totalRowNum,int totalColNum){
int startX=0;
int startY=0;
int endX=totalRowNum-1;
int endY=totalColNum-1;
while(startX<=endX|| startY<=endY){
if(startY<=endY)//從左到右
{
printRC(a,startX,startY,startX,endY);
}else{
break;
}
if(startX+1<=endX){//從上到下
printRC(a,startX+1,endY,endX,endY);
}else{
break;
}
if(endY-1>=startY){//從右到左
printRC(a,endX,endY-1,endX,startY);
}else{
break;
}
if(endX-1>=startX+1)//從下到上
{
printRC(a,endX-1,startY,startX+1,startY);
}else{
break;
}
System.out.println();
System.out.println("********************");
//一圈完畢
startX++;
startY++;
endX--;
endY--;
}
}