一 变幻图表案例

打印金字塔图案:

核心思想:先确定打印几行,再找出*空格之间的关系
练习一:

import java.util.Scanner;

public class Ch1_1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int i,j,k,n;
		Scanner input=new Scanner(System.in);
		System.out.print("请输入金字塔层数:");
		n=input.nextInt();
		for(i=1;i<=n;i++) {
			for(j=1;j<=i-1;j++) {
				System.out.print(" ");
			}
			for(k=1;k<=11-2*i;k++) {
				System.out.print("*");
			}
			System.out.print("\n");
		}	
	}
}

练习一运行结果:

在这里插入图片描述
练习二:

import java.util.Scanner;

public class Ch1_1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int i,j,k,n;
		Scanner input=new Scanner(System.in);
		System.out.print("请输入金字塔层数:");
		n=input.nextInt();
		for(i=1;i<=n;i++) {
			for(j=1;j<=n-i;j++) {
				System.out.print(" ");
			}
			for(k=1;k<=2*i-1;k++) {
				System.out.print("*");
			}
			System.out.print("\n");
		}	
	}
}

练习二运行结果:
在这里插入图片描述

打印九九乘法表

核心思想:确定打印几行,每行有几个表达式

public class Ch1_2 {
	public static void main(String [] args) {
	for(int i=1;i<=9;i++) {
		for(int j=1;j<=i;j++) {
			System.out.print(" "+i+"*"+j+"="+(i*j));
		}
		System.out.print("\n");
	}
	
	}
}

结果显示:
在这里插入图片描述

打印杨辉三角

核心思想:先确定要打印的行数,再利用规律以数组形式获取杨辉三角,最后进行输出打印。

import java.util.Scanner;

public class Ch1_3 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner scanner=new Scanner(System.in);
		System.out.print("请输入行数:");
		int num=scanner.nextInt();
		//获得杨辉三角
		int ary[][] = getTriangle(num);	
		//打印杨辉三角
		print(ary);
	}
	
	private  static int [] [] getTriangle(int num){
		//用二维数组进行存储
		int [][]ary=new int[num][num];
		//将竖边和斜边置为1
		for(int i=0;i<ary.length;i++) {
			ary[i][0]=1;
			ary[i][i]=1;
		}
			//i为行,j为列,杨辉三角规律是里面的内容等于正上方+正左上方
		for(int i=1;i<ary.length;i++) {
			for(int j=1;j<=i;j++) {
				ary[i][j]=ary[i-1][j-1]+ary[i-1][j];
			}
		}
		return ary;
    }
		
		//打印杨辉三角
		private  static void print(int [][]ary) {
			for(int i=0;i<ary.length;i++) {
				for(int j=0;j<=i;j++) {
					System.out.printf(" %-3d", ary[i][j]);
				}
				System.out.println();
			}
		}
}	

运行结果:
在这里插入图片描述

打印回型矩阵

核心思想:二维数组进行存储,再填充数字,最后输出。填充数字过程中,需要注意的是:需判断方向,即若出现“障碍物”则变换方向。

public class Ch1_4 {
	static int length=8;
	static int  value=1;
	//二维数组存储
	static int [][] snake=new int [length][length];
	//代表当前前进方向
	static Direction lastDirection = Direction.Right;
	static enum Direction{
		Right,Down,Left,Up;
	}
	//按照顺时针,最外一圈,从外向里,填充数字
	public static void initialArray() {
		int row=0,col=0;
		for(int c=0;c<length*length;c++) {
			snake[row][col]=value;
			//寻找下一步位置
			lastDirection =findDirection(row,col);
			switch(lastDirection) {
			  case Right://右走的话,列加一
				col++;
				break;
			  case Down://向下走,行加一
				  row++;
				  break;
			  case Left:
				  col--;
				  break;
			  case Up:
				  row--;
				  break;
			  default:
				  System.out.println("error");
				  
			}
			value++;
		}
	}
	//根据当前方向,结合当 前位置,确定下一步方向
	static Direction findDirection(int row,int col){
		Direction direction=lastDirection;
		switch(direction) {
		 case Right:{//到右边界或者当前右边已经填充过数字,则往下走
			 if((col==length-1||snake[row][col+1]!=0))
				 direction=direction.Down;
			 break;
		 }
		 case Down:{//到了下边界或者当前位置下方已经填充过数字,则左走
			 if((row==length-1||snake[row+1][col]!=0))
				 direction=direction.Left;
			 break;
		 }
		 case Left:{//到了左边界或者当前位置左边已经填充数字,则上走
			 if((col==0||snake[row][col-1]!=0))
				 direction=direction.Up;
			 break;
		 }
		 case Up:{//如果当前上方已经填充过数字,则转弯向右
			 if((snake[row-1][col]!=0))
				 direction=direction.Right;
			 break;
		 }
		 
		}
    	return direction;		
	}
	//输出二维数组
	static void print(int[][]arr) {
		for(int i=0;i<length;i++) {
			for(int j=0;j<length;j++) {
				System.out.printf("%5d",arr[i][j]);
			}
			System.out.println(" ");
		}
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		initialArray();
		print(snake);

	}

}

运行结果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_41520877/article/details/103897617