摘自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);
}
}
打印结果为:
换个参数试试: