有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java形状在控制台上向下移动如何执行?

我想在我的控制台上移动我的形状,就像它们掉下来一样。我所做的是将形状循环3次问题是顶部形状仍然保留我是否删除/删除以前的形状或更改其可见性?我被告知你不能那样做,那么我想知道我该怎么做,为什么我不能这样做?希望这是有意义的

class Pyramid extends Thread {

    //shape length
    static int shapeLength = 10;
    //symbol for shape
    static String symbol = "$";

    static int m = 0;
    static int k;

    public static void move() throws Exception {

        //printing shape multiple times
        for (int m = 0; m < 3; m++) {
            try {
                Thread.sleep(500);
                //geting shape lenth
                for (int i = 0; i <= shapeLength; i++) {
                    //get shape size
                    for (int j = 0; j <= shapeLength - i; j++) {
                        //changing shape to 90 degress
                        System.out.print(" ");

                    }
                    //getting size
                    for (int k = 0; k <= i; k++) {
                        //giving space between symbol
                        System.out.print(symbol + " ");
                    }
                    //making triangle shape
                    System.out.println();
                }
            } catch (Exception e) {
                System.out.println(e);
            }
        }
    }

    public static void main(String[] args) throws Exception {
        move();
    }
}

共 (1) 个答案

  1. # 1 楼答案

    在任何渲染过程中,都需要清除画布并渲染新帧以获得动画。因为你在控制台上打印,那是你的画布,所以每次你想要渲染你的形状时,你都需要清除控制台

    控制台的问题是它们完全不同,因此并非所有方法都适用于所有地方。有关如何在Windows或Linux命令行上执行此操作,请查看此处:Java: Clear the console

    因此,让它在Windows(可能还有Linux)中工作的一种方法是添加^{,例如,您的循环可以如下所示:

    //m would be the "frame" number
    for( int m = 0; m < 30; m++ ) {
      try {        
        //clear the console
        System.out.print("\033[H\033[2J");                      
    
        //render empty lines, one more for each "frame"
        for( int l = 0; l < m; l++) {
          System.out.println( );
        }
    
        ... //render your shape here
    
        //delay the next "frame"
        Thread.sleep( 100 );
      }
    }
    

    请注意,由于控制台的工作方式不同,这在Eclipse控制台中不起作用,我认为在其他IDE的控制台中也不起作用