自娛自樂(一)--打印菱形

摘自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);
		
	}

}

打印結果爲:


換個參數試試:



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章