2

缩放时,我的“数字”无法让我的 for 循环运行正确的次数。这里的 LINES 常量是缩放“数字”。

我面临的问题在于我认为:

for(int k = 0; k < LINES; k++){
    System.out.print("*******");
}

它应该在底部做一行 * 。

这是我的整个代码,它产生了某种楼梯图形

public class PP5 {
public static int j;
public static final int LINES = 5;
public static void main(String[] args) {
    for(j = 0 ; j < LINES; j++){

        fSpaces();
        System.out.print("  o   *******");
        bSpaces();
        System.out.println("*");
        fSpaces();
        System.out.print(" /|\\  *");
        bbSpaces();
        System.out.println("*");
        fSpaces();
        System.out.print(" / \\  *");
        bbSpaces();
        System.out.println("*");
    }
    for(int k = 0; k < LINES; k++){
        System.out.print("*******");
    }
}



public static void fSpaces(){
    for(int i = (LINES-1); i > j; i--){
        System.out.print("      ");
    }
}
public static void bSpaces(){
    for(int i = 0; i < j; i++){
        System.out.print("      ");
    }
}
public static void bbSpaces(){
    for(int i = 0; i < j+1; i++){
        System.out.print("      ");
    }
}
}

任何优化都受到高度赞赏。谢谢

4

3 回答 3

3

您需要 38 颗星,而您正在打印 35 颗星

38=(6(Every increment) * 6 (No of times) )+2 (first increment is of 8[6+2])

No of times =6 Because indexing starts from 0 (0,1,2,3,4,5) so in actual counting is 6

所以用

for(int k = 0; k <(LINES+1)*6; k++){
        System.out.print("*");
    }
    System.out.print("**");// last star

输出:

                          o   ********
                         /|\  *      *
                         / \  *      *
                    o   *******      *
                   /|\  *            *
                   / \  *            *
              o   *******            *
             /|\  *                  *
             / \  *                  *
        o   *******                  *
       /|\  *                        *
       / \  *                        *
  o   *******                        *
 /|\  *                              *
 / \  *                              *
**************************************
于 2013-09-11T19:16:33.007 回答
2

得到类似这样的效果

                          o   ********
                         /|\  *     |*
                         / \  *     |*
                    o   *******     |*
                   /|\  *     |     |*
                   / \  *     |     |*
              o   *******     |     |*
             /|\  *     |     |     |*
             / \  *     |     |     |*
        o   *******     |     |     |*
       /|\  *     |     |     |     |*
       / \  *     |     |     |     |*
  o   *******     |     |     |     |*
 /|\  *     |     |     |     |     |*
 / \  *     |     |     |     |     |*
**************************************

|_____|_____|_____|_____|_____|_____|_

你需要注意这部分的每一个|_____

有六个字符,所以你需要使用六个*并打印它们LINES + 1,因为有LINES + 1 |_____部分。

这将产生

************************************|_

|_____|_____|_____|_____|_____|_____|_

所以你需要*手动添加最后两个所以将你的最后一个循环更改为

for (int k = 0; k <= LINES; k++) {
    System.out.print("******");//reduce star numbers by one
}
System.out.print("**");//and add this line
于 2013-09-11T19:26:17.540 回答
1

在您的实施中,只需更换

for(int k = 0; k < LINES; k++){
    System.out.print("*******");
}

for(int k = 0; k < STEPS+1; k++){
    System.out.print("******");
}
System.out.print("**");

动机是每一步添加 7 * 并有一个重叠。这意味着您需要添加 6 * 而不是 7。您再添加 1 次以匹配顶部(但缺少 2 *:1,因为顶行由 7* 和一个用于列)。

于 2013-09-11T19:40:38.387 回答