我一直在尝试用Java编写一个程序,以逐个字母输出文本,每个字母之间都有一个停顿。代码将字符串自动换行并打印。当延迟为半秒或一秒时,我的延迟方法“ slow()”可以很好地工作,但是在较低的延迟时间,它会做一些奇怪的事情。
当打印并且延迟特别短时,程序会在该行上挂起延迟时间乘以行返回之前要打印的字母数,然后立即将所有内容吐出。
同样,当延迟设置为250毫秒时,文本也会错误地打印出来。
在示例中,字符串为:
“ Lorem ipsum胡萝卜,生态番茄汤。没有电视的狮子,但电视丑陋。”
预期的输出将是:
Lorem ipsum dolor坐下来,自私自利
。没有员工能像狮子一样生活,但是电视可以污秽。
但是250的输出是:
莱姆非常定,主持人本科
研究。但生活中的任何乳香。
这是代码:
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) {
}
}
我不确定它是否重要,但这都是在带有JDK 1.7的NetBeans 7.4 x64中完成的。
我是Java的新手,但不是编程的新手。任何帮助,将不胜感激!主要问题是时间安排,这就是我需要工作的时间;奇怪的印刷只是一个问题。
这听起来有点腥。.从命令行运行它,您的代码看起来不错并且对我来说也很好。我认为,就像吉姆·加里森(Jim Garrison)所说,这与您的环境有关。您是否尝试过从命令行运行程序,以便将Netbeans排除在外?
接下来我会怀疑是Thread.currentThread().interrupt();
您的代码行中的内容catch(InterruptedException ex)
。尝试将其注释掉(除了可能打印InterruptedException
堆栈跟踪(ex.printStackTrace()
)外,什么也不做。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句