自娱自乐(一)--打印菱形

摘自java经典50题中的第19题,题目要求为打印下列图形程序19题目:打印出如下图案(菱形)          *     ***    ******   ********    ******     ***      *   网上有很多这种题的解答,但是大部分都是用类c的思想解决的,面向过程的直接解了下来,虽然短小精悍,但我觉得,既然用java实
摘要由CSDN通过智能技术生成

摘自java经典50题中的第19题,题目要求为打印下列图形

程序19

题目:打印出如下图案(菱形)   
       *   
  ***   
 ******   
********   
 ******   
  ***   

   *  

网上有很多这种题的解答,但是大部分都是用类c的思想解决的,面向过程的直接解了下来,虽然短小精悍,但我觉得,既然用java实现,就要用面向对象的思想给他包装一下吧,我们知道面向对象的思想在一定程度上解决了代码重用的问题,我的代码在解决原有问题的基础上进行了以下扩展:

1.以*为字符元,可以用其他字符串代替

2.最大字符元打印长度扩展

仅为大家提供一种思路,如有做的不足的地方,欢迎大家指教。

代码如下:

//程序19
//题目:打印出如下图案(菱形)   
//   *   
//  ***   
// ******   
//********   
// ******   
//  ***   
//   *   
class MyTest {
	

	private String s = null;
	//x+2y = longn
	private int x;
	private int longn;
	private int y;
	
	public String getS() {
		return s;
	}
	public void setS(String s) {
		this.s = s;
	}
	public int getX() {
		return x;
	}
	public void setX(int x) {
		this.x = x;
	}
	public int getLongn() {
		return longn;
	}
	public void setLongn(int longn) {
		this.longn = longn;
	}
	public int getY() {
		return y;
	}
	public void setY(int y) {
		this.y = y;
	}
	/**
	 * 构造函数
	 * @param s
	 * @param x
	 * @param longn
	 */
	public MyTest(String s, int x, int longn){
		this.s = s;
		this.x = x;
		this.longn = longn;
		this.y = (longn - x)/2;
	}
	
	/**
	 * 生成空白字符串
	 * @param y
	 * @param s
	 * @return
	 */
	public StringBuffer creatspace(int y,String s){
		StringBuffer resb = new StringBuffer();
		for(int i = 0;i <= y*s.length();i++){
			resb.append(" ");
		}
		return resb;
	}
	
	/**
	 * 生成主要字符串
	 * @param x
	 * @param s
	 * @return
	 */
	public StringBuffer creatmain(int x,String s){
		StringBuffer resb = new StringBuffer();
		for(int i = 0;i <= x;i++){
			resb.append(s);
		}
		return resb;
	}
	
	/**
	 * 返回字符串为:空白字符串+字符+空白字符串
	 */
	@Override
	public String toString() {
		// TODO Auto-generated method stub
		String rest = "";
		StringBuffer resb = new StringBuffer();
		resb.append(creatspace(y,s));
		resb.append(creatmain(x,s));
		resb.append(creatspace(y,s));
		rest = resb.toString();
		return rest;
	}

}
public class Test19 {

	
	public static void myPrint(String s,int maxlong){
		int ii =0;
		int flagii = 2;
		for(int i = 0;i<=(maxlong-1);i++){
			if(i==0){
				ii = 0;
			}else if(2*i < maxlong){
				ii = ii + flagii;
			}else if(2*i > maxlong){
				ii = ii - flagii;
			}
			MyTest tempMyTest = new MyTest(s, ii, maxlong);
			System.out.println(tempMyTest);
		}
	}
	
	public static void myPrint(String s,int maxlong,int ii,int flagii,int flag){
		for(int i = 0;i<=(maxlong-1);i++){
			if(i==0){
				ii = 0;
			}else if(2*i < maxlong){
				ii = ii + flagii;
			}else if(2*i > maxlong){
				ii = ii - flagii*flag;
			}
			MyTest tempMyTest = new MyTest(s, ii, maxlong);
			System.out.println(tempMyTest);
		}
	}
	
	
	
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String s = "*";
		int maxlong = 7;
		myPrint(s,maxlong);
		//myPrint(s, maxlong, 0, 2, 1);
		
	}

}

打印结果为:


换个参数试试:



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值