顺逆时针回型阵

package test;


import java.util.Scanner;


/**
 * @author 熊浪
 * @创建时间2016年9月26日
 * @Email xiongl@sunline
 * @此类的作用
 */
public class Test {


public static void main(String[] args) throws Exception {
Scanner sc=new Scanner(System.in);
System.out.println("请输入横轴数字");
int x=sc.nextInt();
System.out.println("请输入纵轴数字");
int y=sc.nextInt();
int[][] array = getClockWiseArray(x,y);
System.out.println("============顺时针回型阵===========");
for(int i=0,len=array.length;i<len;i++){  
       for(int j=0,lenths=array[i].length;j<lenths;j++){  
           System.out.print(array[i][j]+"\t");  
       }  
       System.out.println();  
   } 
array=getAntiClockWiseArray(x, y);
System.out.println("============逆时针回型阵===========");
for(int i=0,len=array.length;i<len;i++){  
       for(int j=0,lenths=array[i].length;j<lenths;j++){  
           System.out.print(array[i][j]+"\t");  
       }  
       System.out.println();  
   } 

}

/** 
* 获取xInt * yInt逆时针回形矩阵数组 
* @param xInt,矩阵x轴大小 
* @param yInt,矩阵y轴大小 
* @return 
*/  
public static int[][] getAntiClockWiseArray(int xInt, int yInt){  
   int xMax = xInt;  
   int yMax = yInt;  
   int array[][]=new int[yMax][xMax];  
   int x = 0, y = 0;  
   int xMin = 0, yMin = 0;  
   int size = xMax * yMax;  
   boolean flag = true;  
   for(int i=0;i<size;i++){  
    array[y][x] = i+1;  //获取第一个数
       if((y+1)<yMax && flag){  
           y++; //获取横坐标为0,纵坐标递增[[1,,,,][2,,,,][3,,,,][4,,,,][5,,,,]],横坐标为1,纵坐标递增
       }else if((x+1)<xMax && flag){  
           x++; //获取纵坐标为5,横坐标递增数组变为 [[1,,,,][2,,,,][3,,,,][4,,,,][5,6,7,8,9]]
       }else {  
           if(y>yMin){  
               y--; //获取横坐标为5纵坐标递减数组变为 [[1,,,,13][2,,,,12][3,,,,11][4,,,,10][5,,,10,9]]
           }else if(x>(xMin+1)){  
               x--; //获取纵坐标为0,横坐标递减,数组 [[1,16,15,14,13][2,,,,12][3,,,,11][4,,,,10][5,,,10,9]]
           }else{  
               xMax--;   
               yMax--;  
               xMin++;  //数组的横纵轴减小1,横纵轴最小值加1,减去4方的,循环的次数减小y次,继续执行。 
               yMin++;  
               y++;  
               flag = true;  
           }  
       }  
       if((y+1) == yMax && (x+1) == xMax){  
           flag = false;  
       }  
   }  
   return array;  
}

/** 
* 获取xInt * yInt顺时针回形矩阵数组表示先添加的是横轴 
* @param xInt,矩阵x轴大小 
* @param yInt,矩阵y轴大小 
* @return 
*/  
public static int[][] getClockWiseArray(int xInt, int yInt){  
   int xMax = xInt;  
   int yMax = yInt;  
   int array[][]=new int[yMax][xMax];  
   int x = 0, y = 0;  
   int xMin = 0, yMin = 0;  
   int size = xMax * yMax;  
   boolean flag = true;  
   for(int i=0;i<size;i++){  
    array[x][y] = i+1;  //
       if((y+1)<yMax && flag){  
           y++;  
       }else if((x+1)<xMax && flag){  
           x++;  
       }else {  
           if(y>yMin){  
               y--;  
           }else if(x>(xMin+1)){  
               x--;  
           }else{  
               xMax--;  
               yMax--;  
               xMin++;  
               yMin++;  
               y++;  
               flag = true;  
           }  
       }  
       if((y+1) == yMax && (x+1) == xMax){  
           flag = false;  
       }  
   }  
   return array;  
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值