打印螺旋矩阵的程序

最近看到一道面试题要求打印螺旋状矩形,这是一道很普通的面试题,去网上找了一下,发现解决方案都是不断的用for循环,造成结构很复杂,所以我花了半个小时的时间重新写了一个
public class test {

	public static void main(String[] args) {
		
		//打印的矩阵高
		int maxi = 5;
		//要打印的矩阵宽
		int maxj = 6;
		int maxnum=maxi*maxj;
		int i = 0;
		int j = 0;
		int[][] a = new int[maxi][maxj];
		for (int k = 0; k < maxi; k++) {
			for (int k2 = 0; k2 < maxj; k2++) {
				a[k][k2] = 0;
			}
		}
		String flag = "j";
		int z = 1;
		String flagi = "+";
		String flagj = "+";
		a[0][0]=z++;
		while (!check(a)) {
			if (flag.equals("j")) {
				if (flagj.equals("+")) {
					j++;

					try {
						if (a[i][j] != 0) {
							flag = "i";
							flagj = "-";
							j--;
							continue;
						}
					} catch (Exception e) {
						flag = "i";
						flagj = "-";
						j--;
						continue;
					}

				} else {
					j--;
					try {
						if (a[i][j] != 0) {
							flag = "i";
							flagj = "+";
							j++;
							continue;
						}
					} catch (Exception e) {
						flag = "i";
						flagj = "+";
						j++;
						continue;
					}
				}
			}
			if (flag.equals("i")) {
				if (flagi.equals("+")) {
					i++;
					try {
						if (a[i][j] != 0) {
							flag = "j";
							flagi = "-";
							i--;
							continue;
						}
					} catch (Exception e) {
						flag = "j";
						flagi = "-";
						i--;
						continue;
					}
				} else {
					i--;
					try {
						if (a[i][j] != 0) {
							flag = "j";
							flagi = "+";
							i++;
							continue;
						}
					} catch (Exception e) {
						flag = "j";
						flagi = "+";
						i++;
						continue;
					}
				}

			}
			a[i][j] = z++;
			if (z > maxnum)
				break;
		}
		for (int k = 0; k < a.length; k++) {
			for (int k2 = 0; k2 < a[k].length; k2++) {
				System.out.print(a[k][k2]+"   ");
			}
			System.out.println();
		}
	}
//检查 矩阵是否还有项未填
	public static boolean check(int[][] a) {
		for (int k = 0; k < a.length; k++) {
			for (int k2 = 0; k2 < a[k].length; k2++) {
				if (a[k][k2] == 0)
				return false;
			}
		}
		return true;
	}

}

你可能感兴趣的:(面试,J#)