【Java编程】打印图形

定义一个类 Draw ,在 类 中 提供 3 个 方法:输出直角三角形(drawTrian()) 、 输出矩形(drawRec()) 及平行四边形(drawPra()) 。通过方法可以输出由“*” 组成的一个图形。 同时在类中包含两个属性:星号的个数(count) 、行数(lines) 。最后在测试类中进行调用。

在写代码之前首先来说一下基本:

矩形:怎么打印一个矩形?比如我们要打印一个4行5列的矩形:首先我们要控制行数和列数,使用for循环的嵌套循环完成,外层循环控制行数,内层循环控制列数。

代码如下:

public class Test {
	public static void main(String[] args) {
		// 打印一个4行5列的矩形
		// 外层循环打行
		for (int i = 1; i <= 4; i++) {
			// 内层循环打列
			for (int j = 1; j <= 5; j++) {
				// 每循环一次打一个*
				System.out.print("*");// 注意此处不换行,每次打到一行上面
			}
			// 每打完一行就换行
			System.out.println();
		}
	}
}



平行四边形:通过以上的矩形打印,是否对平行四边形有了一些想法?平行四边形和矩形一样都是外大行,内打列。


通过这个图是否看出了规律

代码如下:

public class Test {
	public static void main(String[] args) {
		// 打印一个4行5列的平行四边形
		// 外层循环打行
		for (int i = 1; i <= 4; i++) {
			// 打空格
			for (int k = 1; k < i; k++) {
				System.out.print(" ");// 注意此处输出不换行
			}
			// 内层循环打列
			for (int j = 1; j <= 5; j++) {
				// 每循环一次打一个*
				System.out.print("*");// 注意此处不换行,每次打到一行上面
			}
			// 每打完一行就换行
			System.out.println();
		}
	}
}


三角形:看图分析


根据上图分析,我们可以找出一个规律,空格的个数等于总行数减当前行。

代码如下:

public class Test {
	public static void main(String[] args) {
		// 打印一个4行的三角形
		// 外层循环打行
		for (int i = 1; i <= 4; i++) {
			// 打空格
			for (int k = 1; k <=4-i; k++) {
				System.out.print(" ");// 注意此处输出不换行
			}
			// 内层循环打列
			for (int j = 1; j <= i*2-1; j++) {
				// 每循环一次打一个*
				System.out.print("*");// 注意此处不换行,每次打到一行上面
			}
			// 每打完一行就换行
			System.out.println();
		}
	}
}



到处局部分析已经完毕,下面进入我么的题目要求:

按照题目我们需要输入两个参数,一个是星星的个数,另一个是行数,那么我们经过上面的基本分析已经知道了原理,我们是否可以根据星星的个数和行数来求列数,得到行数和列数是不是有回到了上面的代码中。

代码如下:

public class Deaw {
	int count;
	int lines;

	// 一个有参的构造方法,在new对象的时候指定星数和行数
	public Deaw(int count, int lines) {
		this.count = count;
		this.lines = lines;
	}

	// 三角形
	public void drawTrian() {
		int h = 0;
		a: for (int i = 1; i <= lines; i++) {
			// 打空格
			for (int k = 1; k <= lines - i; k++) {
				System.out.print(" ");
			}
			// 打印五个星星
			for (int j = 1; j <= 2 * i - 1; j++) {
				System.out.print("*");
				h++;
				// 星星打完了,停止打印
				if (h == count) {
					break a;
				}
			}
			// 行数打够了但是星星每打完,继续打星星
			/*if (i == lines && h != count) {
				for (int k = 1; k <= count - h; k++) {
					System.out.print("*");
				}
			}*/
			// 每打印五个星就换行
			System.out.println();
		}
	}

	// 矩形
	public void drawRec() {
		int lie = count / lines;
		int h = 0;
		a: for (int i = 1; i <= lines; i++) {
			for (int j = 1; j <= lie; j++) {
				System.out.print("*");
				h++;
				//星星打完了,停止打印
				if (h == count) {
					break a;
				}
			}
			// 行数打够了但是星星每打完,继续打星星
			/*if (i == lines && h != count) {
				for (int k = 1; k <= count - h; k++) {
					System.out.print("*");
				}
			}*/
			System.out.println();
		}
	}

	// 平行四边形

	public void drawPra() {
		int lie = count / lines;
		int h = 0;
		a: for (int i = 1; i <= lines; i++) {
			for (int k = 1; k < i; k++) {
				System.out.print(" ");
			}
			for (int j = 1; j <= lie; j++) {
				System.out.print("*");
				h++;
				// 星星打完了,停止打印
				if (h == count) {
					break a;
				}
			}
			// 行数打够了但是星星每打完,继续打星星
			/*if (i == lines && h != count) {
				for (int k = 1; k <= count - h; k++) {
					System.out.print("*");
				}
			}*/
			System.out.println();
		}
	}

}


调用方法如下:

public static void main(String[] args) {
		Deaw d = new Deaw(7, 3);
		d.drawRec();
		// d.drawPra();
		// d.drawTrian();
	}


  • 4
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值