【问题标题】:Triangle That Prints With Numbers as rows [closed]将数字打印为行的三角形[关闭]
【发布时间】:2013-12-25 23:55:36
【问题描述】:

我有一个任务要求我们创建一个看起来像这样的三角形,只有 for 循环,我目前无法将我的星号更改为那些数字,我可以将整个三角形变成一个数字。

这是我打印出三角形的代码:

 public class ExtraCredit_Bazar {

    public static void main ( String arg[] ){

       for (int i=1; i<10; i += 2)
       {
            for (int k=0; k < (4 - i / 2); k++)
            {
                 System.out.print(" ");
            }
            for (int j=0; j<i; j++)
            {
                    System.out.print("*");
            }
            System.out.println("");

       }
  }

【问题讨论】:

  • 您是在问问题,还是想聘请程序员?
  • 对不起,这是我第一次使用这个网站,我会编辑它

标签: java for-loop


【解决方案1】:

据我了解,您不知道如何获得每个级别的正确数字。你可以这样做:

public class ExtraCredit_Bazar {

    public static void main ( String arg[] ){

       for (int i=1; i<10; i += 2){
            for (int k=0; k < (4 - i / 2); k++){
                 System.out.print(" ");
            }
            int number = 1;
            for (int j=0; j < (i/2); j++){
                System.out.print(number);
                number *= 2;
            }
            for (int j= (i/2); j < i; j++){
                System.out.print(number);
                number /= 2;
            }
            System.out.println("");
        }
    }
}

所以基本上,我已将您的 for 循环打印“*”分成两个 for 循环。第一个打印一个数字并将其乘以 2 以进行下一次迭代。然后,当到达中间时,进入第二个循环,它将数字除以 2 以使其再次变小。

【讨论】:

  • 所以我在程序中使用了你的代码,它会打印三角形,但它会在顶部打印 1,然后在其余部分打印 0
  • 您是否在每次运行 for 循环之前分配 number = 1?
  • 是的,它在 main 方法下面
  • 刚刚编译,完全没问题。我编辑了我的帖子,以便您可以看到整个代码。我刚刚完成了我写的事情:插入了我的两个 for 循环,而不是使用代码中的变量“j”的一个。
  • 当我将您的代码放入我的程序时,我发现了错误,我错误地输入了错误的内容,但感谢您的帮助
【解决方案2】:

像这样编辑你的第二个内部循环:

int number = 1;

for (int j = 0; j < i; j++) {
    System.out.print(number);

    if (j < i / 2) {
        number *= 2;
    } else {
        number /= 2;
    }
}

【讨论】:

    【解决方案3】:

    中间的数字应该很容易得到。对于其余的数字,我建议在打印它们之前将字符串保存到一个数组中,以便根据最长(最后一个)字符串的长度将字符串居中。

    public class ExtraCredit_Bazar {
    
        public static void main ( String arg[] ) {
           int z = 1;
           final int lineCount = 8;
           String[] lines = new String[lineCount];
           // do first iteration "by hand" 
           String left="1";
           String right="1";
           lines[0] = left;
    
           for (int i=1; i<lineCount ; i++)
           {
                // update z here
    
                // update left here
    
                lines[i] = /*concat strings here (left, right and maybe spaces)*/;
    
                // update right here Integer.toString(int) if necessary
           }
    
           final int maxStringLength = lines[lineCount-1].length();
           for (int i = lineCount-2; i >= 0; i--) {
               // add spaces to the left of lines[i] dependent on it's
               // length and maxStringLength
    
               // if you do it right, you can reuse the spaces you add to the
               // left and don't have to create them from the start.
               // Therefore the "backwards iteration". 
           }
    
           // print the lines
    }
    

    您可能已经注意到缺少代码。如果您了解 Java(和数学)的基础知识,您应该能够轻松地自己解决这个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-09
      • 1970-01-01
      • 1970-01-01
      • 2011-11-11
      相关资源
      最近更新 更多