【问题标题】:My Java-Triangle Code doesn't print the full Triangle我的 Java-Triangle 代码不打印完整的三角形
【发布时间】:2020-03-20 12:36:34
【问题描述】:

我必须编写一个代码来打印一个三角形,该三角形的最后一行的长度是输入数字。空白处也必须用点填充。

It has to look like this.

此外,代码必须一直运行到输入为奇数为止。

遗憾的是,我的代码没有打印出点或其他星星,而只是打印出最后一行。

有人可以看看它并给我一些提示吗?

任何帮助表示赞赏。非常感谢您。

代码如下:



import java.util.Scanner;

public class Triangle_new {

    //Main-Method with Input-Check

public static void main(String[] args) {

    System.out.println("Type in a number to get the triangle:");


        Scanner sc = new Scanner(System.in);

        int length = sc.nextInt();



        if(length < 0 || length%2 == 0) {

                System.out.println("Please type in a uneven number or zero to quit. ");
                Triangle_Test.check_input(length);

        }else{
            display_triangle(length);
             }  

    }

    //DisplayTriangle-Method


    public static void display_triangle(int length) {

    int lines = (length+1)/2;

        //Height of the Triangle
    get_lines(length);

        //Dotfiller Left Side
    if(lines > 0){
    get_dotsleft(lines, length);
    }
        //Stars-Output
    if(lines > 0) {
    get_stars(lines);
    }
        //Dotfiller Right Side
    if(lines > 0) {
    get_dotsright(lines, length);
    }

    }

    //Constructors for Triangle

    public static void get_lines(int length) {

        for(int lines = 1; lines <= (length + 1) / 2; lines++){
        System.out.println();
        }
    }

    public static void get_dotsleft(int lines, int length){
        for(int leftfiller = 1; leftfiller <= ((length + 1) / 2) - lines; leftfiller++) {
        System.out.print(".");

        }
    }

    public static void get_stars(int lines) {
        for(int stars = 1; stars <= (2 * lines) - 1; stars++) {
        System.out.print("*");

        }
    }



    public static void get_dotsright(int lines, int length){
        for(int rightfiller = 1; rightfiller <= ((length+1) / 2) - lines; rightfiller++) {
        System.out.print(".");
        }
    }


}


    //Triangle_Test Class with Input-Check Method

class Triangle_Test extends Triangle_new {

    public static void check_input(int length) {


    //Check Input until Input is uneven number  

    Scanner sc = new Scanner(System.in);

    do {

    length = sc.nextInt();

    if(length%2 == 0 && length != 0) {
        System.out.println("Invalid input. Try again.");
                      }


    if(length%2 != 0 && length > 0) {

                    }

    //Triangle Output               

    if(length%2 != 0){

    Triangle_new.display_triangle(length);  

    }               

    if(length == 0) { 
    System.out.println(" -> Zero detected. Program will be shutdown.");
    }



    }while(length%2 != 0 || length != 0);

    }

}



【问题讨论】:

    标签: java methods do-while multiple-constructors triangle-count


    【解决方案1】:

    您的get_lines() 方法听起来应该返回三角形将填充多少行(也基于您的评论),但它的作用是打印空行。 尽量不要用。

    【讨论】:

      【解决方案2】:

      如下改变你的 display_tringe 函数:

      public static void displayTriangle(int length) {
              String stars = "*";
              for (int i =0 ; i< ((length+1) /2); i++){
                  String dots = "";
                  for (int j = 0; j < (length - i * 2) / 2; j++) {
                          dots += ".";
                      }
                  System.out.println(dots+stars+dots);
                  stars +="**";
              }
      }
      

      让我解释一下为什么您的解决方案不起作用:

      1. 您的 get_lines 循环仅打印空行。
      2. 您应该在一个大循环中显示所有内容(表示行数),并在此循环中计算要显示的星号和点数。
      3. 请注意:每行中的点数 + 星数始终等于用户输入的总数。
      4. 左侧的点数始终等于星星右侧的点数,每边 =(用户输入的总数 - 星星数)/2。
      5. 每行将星数增加 2。

      这就是我思考问题的方式,因此我的解决方案就是这样。

      【讨论】:

      • 感谢您的回答。我必须使用 get_ 方法来构建三角形,这就是问题所在。
      • @Felix 我将使用您的 get_ 方法发布另一个解决方案,检查一下。
      【解决方案3】:

      以下是代码中的问题:

      1. get_lines 只是在 for 循环中打印了一些新行,而我们只需要在每个星/点组合后一个新行。换句话说,新行的数量不会改变。它总是每行一个。

      2. get_dotsLeft 和 get_dotsRight 实际上是相同的。它们应该只组合在一个功能中。

      3. 循环打印点和星的限制不正确。我修好了。

      4. 按照惯例,命名函数时最好遵循驼峰式命名,即 get_lines 应为 getLines。

      5. 你所有的 get_ 函数都应该是私有的。它们应该只能在您的班级中访问,而不应该暴露给其他班级。 (这不会引发错误,但将这些函数公开并不是一个好的设计)。

        public static void display_triangle(int length) {
        int lines = (length+1)/2;
        for (int i =1 ; i<= lines ;i++) {
            //Height of the Triangle
            get_lines(length);
            get_dotsleft(lines-i);
            get_stars(i);
            get_dotsright(lines-i);    
          }
        }
        
        //Constructors for Triangle
        private static void get_lines(int length) {                     
          System.out.println(""); 
        }
        
        private static void get_dotsleft(int lines){
            for(int leftfiller = 1; leftfiller <= lines; leftfiller++) {
                System.out.print(".");
            }
        }
        
        private static void get_stars(int lines) {
            for(int stars = 1; stars <= (2 * lines) - 1; stars++) {
                System.out.print("*");
            }
        } 
        private static void get_dotsright(int lines){
            for(int rightfiller = 1; rightfiller <= lines; rightfiller++) {
                System.out.print(".");
            }
        }
        

      【讨论】:

      • 在尝试使用您建议的添加内容编译代码时,我收到以下错误代码:我将它们发布在这里,因为它们超过了允许的字符数。 justpaste.it/6oojm
      • @Felix 他们不会编译并给出错误,因为我更改了传递给 get_dotsleft、get_stars 和 get_dotsright 的参数数量。看来,在您的代码中的某个地方,您仍然让它们采用两个参数而不是一个。
      • 好的,我已经解决了。但是现在三角形的第一排星星没有出现。例如输入 7,三角形必须有 4 行星星,其中 7 - 5 - 3 -1 颗星星。现在它只有 7 - 5 - 3。我应该改变什么?
      • @Felix 我编辑了帖子。您只需要更改 display_triangle 方法中的循环,使其显示:for (int i =1 ; i&lt;= lines ;i++), I put i&lt;= 而不是 i&lt;
      猜你喜欢
      • 1970-01-01
      • 2015-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多