【问题标题】:How to make a java program with output a triangle of numbers?如何制作一个输出三角形数字的java程序?
【发布时间】:2012-10-11 00:48:44
【问题描述】:

我知道有一篇与此类似的帖子,但根据答案,我不能同时将答案应用于我当前的课程,或理解其余的答案。

我需要使用嵌套的“for 循环”创建一个程序,该程序会创建一个像这样的输出(只是对称的)。我一直试图让这个工作整整两个晚上,但无法弄清楚......

               1 
             1 2 1 
            1 2 4 2 1 
          1 2 4 8 4 2 1 
        1 2 4 8 16 8 4 2 1 
      1 2 4 8 16 32 16 8 4 2 1 
   1 2 4 8 16 32 64 32 16 8 4 2 1 
1 2 4 8 16 32 64 128 64 32 16 8 4 2 1 

如果有任何帮助,我将不胜感激!!!

public class PyramidOfDoom { 
    public static void main(String[] args) 
        int k = 2; 
        int totalWidth = 8; 
        for (int row = 1; row <= totalWidth; row++) { 
            for (int col = 1; col <= totalWidth; col++) { 
                if (col <= totalWidth - row) { 
                    System.out.print(" "); 
                } else { 
                    System.out.print(k);; 
                } 
            } 
            System.out.println(); 
        } 
    } 
}

【问题讨论】:

  • 到目前为止,您尝试过哪些不适合您的方法?在为它工作了两个整个晚上之后,你肯定可以发布一些努力。
  • 由于某种原因,它不允许我将我的代码复制并粘贴到评论部分......请稍等。
  • Ermm.. 很抱歉。有谁知道如何在这里获取我的代码?我尝试输入它,按回车键,它只是提交我的评论......呃,今晚很挣扎!
  • 我们去!上传了我当前的代码。它的输出是三角形的一半,全是 2!
  • @BenToms 请记住,如果您正在努力解决编程问题,最好的办法是先解决一个更简单的问题。例如,对于这个特定的问题,我建议您首先编写一个函数,该函数将生成一个字符串,该字符串具有 2 的所有幂,直到 2^n,然后修改它以生成一个最高为 2^n 的字符串,然后返回到 @ 987654325@。一旦你把它弄下来,你可以在一个循环中重复它来生成你的金字塔,一旦你把它弄下来,你就可以担心输出居中了。

标签: java for-loop nested


【解决方案1】:

我认为它可以通过简单的步骤完成,例如 1. 打印前导空格 2. 打印递增数字 3. 打印递减数字 4. 打印尾随空格 5 打印新行。

示例代码(概念)如下。

    int row = 10;
    for(int i=1; i<=numRow ; i++){
       int num = 1;
       for(int j=0; j<numRow- i; j++ ){
           System.out.print("   ");
       }
       for(int j=numRow-i+1; j<=numRow ; j++ ){
           System.out.print(num+" ");
           num=num*2;
       }
       num=num/2;
       for(int j=numRow+1; j<numRow+i; j++ ){
           num=num/2;
           System.out.print(num+" ");
       }
       for(int j=numRow+i+1; j<=numRow*2; j++ ){
           System.out.print("  ");
       }
       System.out.print("\n");
    }

【讨论】:

  • 我现在只编程了 7 周,并且刚刚学习了循环,所以我仍在努力学习这一点。非常感谢您的帮助,我将查看此代码,针对我的问题对其进行调整并重新发布!
  • 我只发布了一个学习方面的示例代码。如果您注意到,我首先打印空白,然后将数字增加到中间,然后将数字减少到中间,然后是空格。一行完成后,添加一个新的行语句。我所做的所有这些都是为了你的概念学习,否则我们可以编写更紧凑和更花哨的代码。希望这会有所帮助。
  • 这很有帮助,我重新编写了您的代码(自学)并对其进行了调整以适应我的需要。我不是为了整洁而调整它!非常感谢!
  • 很高兴知道您能够遵循这个概念并使其发挥作用。它对你有用,请接受关闭线程的答案。
【解决方案2】:

你根本没有改变k。您需要继续将其乘以 2,直到到达行的中间,然后开始将其除以 2。就目前而言,在您的 System.out.println(k) 中,如果您从不操作它,您怎么能期望它打印除 2 之外的任何内容? :)

另外,System.out.println(k);; 中有两个分号。这对我来说似乎很奇怪,但我认为它会编译实际上是有道理的。

【讨论】:

  • System.out.println(k);; 实际上是两个语句:System.out.println(k);;; 是一个空语句,在 Java 和许多其他语言中在语法上是完全合法的,但大多是无用的。如果你愿意,你可以用;;;;; 结束每一行,但我不推荐它!
  • 感谢您的帮助,杰夫。这个解释提供了广泛的帮助……我一直在尝试使用指数,以至于我没有尝试只使用 * /。那个额外的;只是因为不小心没有删除一整行无用的代码而挂在那里。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-25
  • 2023-03-18
  • 2021-11-05
  • 2020-01-28
  • 2022-08-12
相关资源
最近更新 更多