我的Java三角代码无法显示完整的三角

时间:2019-11-25 08:56:04

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

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

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);

    }

}



3 个答案:

答案 0 :(得分:0)

您的get_lines()方法听起来像应该返回三角形将要填充的行数(也基于您的注释),但是它的作用是打印空行。 尝试不使用它。

答案 1 :(得分:0)

按如下所示更改display_triange函数:

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。

这就是我对问题的思考,因此提出了解决方案。

答案 2 :(得分:0)

这是您的代码中的问题:

  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(".");
        }
    }