打印金字塔图案:
核心思想:先确定打印几行,再找出*空格之间的关系
练习一:
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);
}
}
运行结果: