我一直在尝试使用Java编写的程序逐字输出文本,并在每个字母之间暂停。 该代码将字符串进行单词换行并打印出来。我的延迟方法“slow()”在延迟为半秒或一秒时效果很好,但在较低的延迟时间下它会出现一些奇怪的问题。
当打印和延迟时间过短时,程序会在该行挂起,直到延迟时间乘以要打印的字母数,然后一次性输出所有内容。
另外,当将延迟设置为250毫秒时,文本也会打印错误。
在此示例中,字符串为:
"Lorem ipsum dolor sit amet,consectetur adipiscing elit。Nulla vitae molestie leo,sed molestie turpis."
预期输出:
Lorem ipsum dolor sit amet,consectetur adipiscing
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新手,但对编程并不陌生。感激任何帮助!主要问题是时间控制, 这是我需要解决的;奇怪的输出只是一个疑问。
System.out.flush()
。请注意,这是一种建议,不保证一定有效。 - Marco13flush()
,我的程序都可以正常工作。 - Jim GarrisonBufferedReader
来读取Java进程的输出。但在控制台中可以正常工作。不过已将System.out.println(words.charAt(i));
更改为System.out.println();
。 - MadProgrammer