我的Java三角代码没有';不要打印完整的三角形

我的Java三角代码没有';不要打印完整的三角形,java,methods,do-while,multiple-constructors,triangle-count,Java,Methods,Do While,Multiple Constructors,Triangle Count,我必须写一个代码,打印一个三角形,最后一行的长度是输入的数字。此外,空的空间必须用圆点填充 此外,代码必须运行,直到输入是一个不均匀的数字 遗憾的是,我的代码没有打印出点或其他星星,只是最后一行 有没有人可以看一下,给我一些提示 谢谢你的帮助。事先非常感谢 代码如下: import java.util.Scanner; public class Triangle_new { //Main-Method with Input-Check public static void m

我必须写一个代码,打印一个三角形,最后一行的长度是输入的数字。此外,空的空间必须用圆点填充

此外,代码必须运行,直到输入是一个不均匀的数字

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

有没有人可以看一下,给我一些提示

谢谢你的帮助。事先非常感谢

代码如下:



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.util.Scanner;
公共课三角新{
//带输入检查的主方法
公共静态void main(字符串[]args){
System.out.println(“输入一个数字得到三角形:”);
扫描仪sc=新的扫描仪(System.in);
int length=sc.nextInt();
如果(长度<0 | |长度%2==0){
System.out.println(“请输入一个不均匀的数字或输入零以退出”);
三角形测试。检查输入(长度);
}否则{
显示三角形(长度);
}  
}
//显示三角形法
公共静态空白显示_三角形(整数长度){
整数行=(长度+1)/2;
//三角形高度
获取_行(长度);
//点填充器左侧
如果(行>0){
获取dotsleft(线、长度);
}
//恒星输出
如果(行>0){
得到星星(线);
}
//点填充器右侧
如果(行>0){
获取正确的点(线、长度);
}
}
//三角形的构造函数
公共静态void get_行(整数长度){
对于(int lines=1;lines您的
get_lines()
方法听起来应该返回三角形将填充多少行(也基于您的注释),它所做的是打印空行。
尽量不要使用它。

按如下方式更改显示三角功能:

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 +="**";
        }
}
publicstaticvoiddisplaytangle(int-length){
字符串星=“*”;
对于(int i=0;i<((长度+1)/2);i++){
串点=”;
对于(int j=0;j<(长度-i*2)/2;j++){
圆点+=”;
}
系统输出打印项次(点+星+点);
星星+=“**”;
}
}
让我解释一下您的解决方案不起作用的原因:

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

  • 这就是我对这个问题的想法,并由此得出了我的解决方案。

    以下是代码中的问题:

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

  • get_dotsLeft和get_dotsRight实际上是相同的。它们应该只在一个函数中组合

  • 打印点和星星的循环的限制不正确。我修复了它们

  • 按照惯例,在命名函数时,最好遵循驼峰式命名,即get_行应该是getline

  • 所有get_uu函数都应该是私有的。它们应该只在类中访问,不应该向其他类公开(这不会引发错误,但公开这些函数不是一个好的设计)

    公共静态空白显示\u三角形(整数长度){
    整数行=(长度+1)/2;
    
    对于(int i=1;我想知道答案。但我必须使用get_u方法来构建三角形,这就是问题所在。@Felix我将使用您的get_u方法发布另一个解决方案,请检查它。当尝试使用您建议的添加内容编译代码时,我得到以下错误代码:我在此处发布了它们,因为它们超过了al的字符数lowed.@Felix他们不会编译并给出错误,因为我更改了传递给get_dotsleft、get_stars和get_dotsright的参数的数量。似乎在代码中的某个地方,他们仍然使用两个参数而不是一个。好吧,我已经解决了这个问题。但是现在三角形的第一行星没有显示出来。例如输入7三角形必须有4行7-5-3-1颗星。现在它只有7-5-3颗星。我应该做什么改变?@Felix我编辑了这篇文章。你只需要在display_triangle方法中更改循环,这样它就会显示:
    for(int I=1;I
    
    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(".");
        }
    }