首页 > 解决方案 > 如何让我的程序为某些值打印一个完整的直角三角形?

问题描述

在此处输入图像描述

我用 88 对程序进行了测试,剩下一颗星来完成三角形。87,两颗星 86 三颗星。这种情况持续了某些数字。

这是编程generate功能的两个选项

• 一种是计算最后一行的长度,例如maxLen,并使用双 for 循环生成一行一个星、一行两星、一行三开始等,以一行结束maxLen星星。maxLen 的值是大于等于二次方程较大解的最小整数x ( x + 1 ) = 2 * num.

System.out.println()• 另一种是在需要换行符的地方执行时,使用一个for 循环打印num stars 。需要换行符的点可以使用两个伴随的整数变量来计算,比如lencount。这里前者是正在生成的行的长度,而 是行中count尚未打印的星数。我们首先将值 1 设置为两个整数变量。在每一轮迭代中,我们减小 的值count,如果 count 的值变为 0,我们插入换行符,增加 的值,len然后将 的值复制lencount当循环终止时,如果 的值count既不等于 0 也不等于 count,我们通过添加更多星来扩展当前行。

    import java.util.*;
    public class TriangleSingle
    {
        public static void generate(int x) //Generates the Triangle
        {
        int len, count;
        len = 1;
        count = 1;
        for (int k = 1; k <= x; k++)
        {
                System.out.print("*");

                count --;

                if (count == 0)
                {
                    System.out.println();
                    len ++;
                    count = len;
                }



        }

        if (count!= 0 || count != len)
                {

            System.out.println("*"); //Completes the triangle if needed
                                       // This is the **problem spot**
                }

标签: javaloopsif-statementtriangle-count

解决方案


诀窍是c在打印每一行的内部循环中增加打印的星数,但n在外部循环中检查它与所需的数字,后者确定要打印多少行。这样,我们肯定会打印完整的行,但是一旦我们至少打印了n星星,我们就会停止。

public static void generate(int n)
{
  for(int c=0, i=0; c<n; i++)
  {
    for(int j=0; j<=i; j++, c++)
      System.out.print('*');
    System.out.println();
  }
}

推荐阅读