How can I replace text that's been printed out

2020-07-18 06:02发布

问题:

I'm new to Java and as an attempt to learn more I tried making a clock. It works perfectly, except for the fact that it prints on a new line every time a second changes. How do I make it so that I can replace the text that's already been printed out with the new time?

public class test {
    public static void main(String[] args) {
        test.clock();
    }
    public static void clock() {
        int sec = 0;
        int min = 0;
        int h = 0;
        for(;;) {
            sec++;
            if(sec == 60) {
                min++;
                sec = 0;
            } else if(min == 60) {
                h++;
                min = 0;
            } else if(h == 24) {
                h = 0;
            }
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            if(h < 10) {
                System.out.print("0"+h+":");
            } else {
                System.out.print(h+":");
            }
            if(min < 10) {
                System.out.print("0"+min+":");
            } else {
                System.out.print(min+":");
            }
            if(sec < 10) {
                System.out.println("0"+sec);
            } else {
                System.out.println(sec);
            }
        }       
    }
}

Here's my code. And here's an example of what I'm trying to do: I want to turn this: 00:00:00, into this: 00:00:01 (the code does this but it prints on a new line and doesn't delete the old time). The thing is that I want to get rid of the first one (00:00:00) and on the same line print the second one (00:00:01).

Is this possible in Java?

回答1:

That has nothing to do with java actually. Rather you want the console you are displaying in to overwrite the text.

This can be done (in any language) by sending a carriage return (\r in Java) instead of a linefeed (\n in Java). So you never use println(), only print() if you want to do that. If you add a print("\r") before the very first print it should do what you want.

BTW it would be far more elegant and simple if you built the entire time in a string and then output it all at once :)