简体   繁体   中英

How can I replace text that's been printed out on screen already in Java?

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?

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

just to make this a bit simpler, you can eliminate the try catch stuff by using "throws InterruptedException" like this:

public static void main(String[] args) throws InterruptedException {
System.out.println("wait for it....");
Thread.sleep(5000);
System.out.println("ok :)");

}

no more try catch stuff. I learned this programming Autonomous codes for the robotics team I'm on. very useful!

System.out.print("\"); change cursor position one time to left. You can try to use AD leters.

Warning this only works on some ide and linux / unix terminals.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM