摘自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);
}
}
打印結果爲:
換個參數試試: