我一直试图让一个用java编写的程序逐字输出文本,每个字母之间有一个暂停.代码字 - 包装字符串并打印它.我的延迟方法"slow()"在延迟半秒或一秒时效果很好,但是在较低的延迟时间它会做一些奇怪的事情.
当打印和延迟时间过短时,程序会挂起该行,延迟时间是返回行之前打印的字母数,然后立即吐出所有内容.
此外,当延迟设置为250毫秒时,文本也会错误地打印出来.
在示例中,字符串是:
"Lorem ipsum dolor sit amet,consectetur adipiscing elit.Nulla vitae molestie leo,sed molestie turpis."
预期的产出是:
Lorem ipsum dolor坐下来,精致的adipistur elit
.Nulla vitae molestie leo,sed molestie turpis.
但250的输出是:
Lrem ipsum dolrst aet,conseteur adipiscing elit
.ulla vitae olestie lo sed oleste turis.
这是代码:
public static void main(String[] args) { String x = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla vitae molestie leo, sed molestie turpis."; say(500,x); // Works Nicely, does one letter at a time with a 0.5s wait in between. System.out.println(); say(250,x); // Has proper delay, but prints strange stuff System.out.println(); say(100,x); // Prints Line by line with a wait of (letters*0.1s) wait in between. } public static void say(int speed, String words) { int i = 0; int ii = 0; while (i < words.length()) { slow(speed); System.out.print("" + words.charAt(i)); if (ii >= 50 && words.charAt(i) == ' ') { System.out.println(words.charAt(i)); ii = 0; } else { ii++; } i++; } System.out.println(" "); } public static void slow(int time) { try { Thread.sleep(time); } catch(InterruptedException ex) { Thread.currentThread().interrupt(); } }
slow()
具有相同毛刺的替代方法:
public static void slow(int time) { long startTime = System.currentTimeMillis(); while(System.currentTimeMillis() - startTime < time) { } }
我不确定它是否重要,但这都是在NetBeans 7.4 x64中使用JDK 1.7完成的.
我是Java新手,但不是编程新手.任何帮助,将不胜感激!主要问题是时机,这是我需要工作的; 怪异的印刷只是一个问题.