【问题标题】:For loop output when scaling figure in java在java中缩放图形时的循环输出
【发布时间】:2013-09-11 19:01:24
【问题描述】:

我无法让我的 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("      ");
    }
}
}

高度赞赏任何优化。 谢谢

【问题讨论】:

  • 到底是什么问题。您可以通过发布您的预期输出和实际输出来说明
  • 您的循环打印“*******”LINE 次。所以星号的总数将是 7 乘以 LINE
  • dl.dropboxusercontent.com/u/50868481/java.png 如您所见,它不会在底线产生足够的 *。如果我通过制作 for 循环使其产生足够的结果:k
  • @all 我们或多或少都得出了相同的结论。以一种重新绘制 n/次的方式重做练习,给人一种男人上去的错觉,怎么样?例如。 10 个步骤。 10 次重绘,这个人一直走到顶端……至少我们需要编写更好的代码……同样的方法。没有图书馆,只有像这里这样的角色。如果有兴趣,请在此处回复,我将问题创建为游戏。

标签: java loops for-loop


【解决方案1】:

您需要 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   *******                        *
 /|\  *                              *
 / \  *                              *
**************************************

【讨论】:

    【解决方案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
    

    【讨论】:

    • 为了好玩,我提出了这个问题的一个变体。动机。在这里,我们都得出了相同的结论。采用这种方式,将需要更多的设计和代码清晰性。 stackoverflow.com/questions/18752559/…
    【解决方案3】:

    在您的实现中只需替换

    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* 组成,而 1 用于列)。

    【讨论】:

    猜你喜欢
    • 2018-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-04
    相关资源
    最近更新 更多