这是我的代码,我试图获取特定的模式,但最终遇到了意外的模式。
for(int i = 0; i < 5; i++)
{
for(int j = 0; j < i * 2; j++)
{
if (i != 3)
{
System.out.print(" ");
}
else
{
System.out.print("*");
}
}
for(int k = 13; k > i * 2; k--)
{
System.out.print("*");
}
System.out.println();
}
我得到了:
*************
***********
*********
*************
*****
什么时候应该得到这个:
*************
***********
*********
***********
*************
有人可以帮助我吗?谢谢!
答案 0 :(得分:3)
您打印的行是一个空格''和星号'
*
'的序列。它的长度始终为13。因此spaces
和stars
的总和必须为13。
每打印一条线,就会在行中添加2个空格并删除2个星号,直到到达发生反向操作的点(该点为9个星号)为止。
此代码将打印该图案。
public class Pattern{
private static final int MAX_LINE_LENGTH = 13;
private static final int MIN_LINE_LENGTH = 9;
private static final int DIFFERENCE = 2;
private static final int LINES = 5;
private static final String SPACE = " ";
private static final String STAR = "*";
public static void main(String[] args) {
printPattern();
}
private static void printPattern(){
int spaces = 0;
int stars = MAX_LINE_LENGTH;
boolean reverse = false;
for (int i=0; i<LINES; i++) {
printLine(spaces,stars);
if (stars == MIN_LINE_LENGTH) {
reverse = true;
}
if (reverse == false) {
spaces+=DIFFERENCE;
stars-=DIFFERENCE;
}else{
spaces-=DIFFERENCE;
stars+=DIFFERENCE;
}
}
}
private static void printLine(int spaces, int stars){
StringBuilder builder = new StringBuilder();
for (int i=0; i<spaces+stars; i++) {
if (i<spaces) {
builder.append(SPACE);
}else{
builder.append(STAR);
}
}
System.out.println(builder.toString());
}
}