我几乎用“不能取消引用长”来解决烦人的问题,但是一切都解决了。因此,有人可以帮我吗?问题是当我检查程序是否在if(System.currentTimeMillis().longValue()==finish)
中超时时,比较不起作用。
public void play()
{
long begin = System.currentTimeMillis();
long finish = begin + 10*1000;
while (found<3 && System.currentTimeMillis() < finish) {
Command command = parser.getCommand();
processCommand(command);
}
if(System.currentTimeMillis().longValue()==finish){
if(found==1){System.out.println("Time is out. You found "+found+" item.");}
else if(found>1 && found<3){System.out.println("Time is out. You found "+found+" items.");}}
else{
if(found==1){System.out.println("Thank you for playing. You found "+found+" item.");}
else if(found>1 && found<3){System.out.println("Thank you for playing. You found "+found+" items.");}
else{System.out.println("Thank you for playing. Good bye.");}
}
}
最佳答案
System.currentTimeMillis()
返回原始long
而不是对象Long
。
因此,您不能调用longValue()
方法或该方法上的任何方法,因为原始不能成为方法调用的对象。
另外,调用longValue()
是没有用的,因为System.currentTimeMillis()已返回一个长值。
这个更好 :
if(System.currentTimeMillis()==finish){
但是实际上,这种情况:即使
if(System.currentTimeMillis()==finish)
语句中的true
,System.currentTimeMillis() == finish
也不能是while
: while (found<3 && System.currentTimeMillis() < finish) {
Command command = parser.getCommand();
processCommand(command);
}
因为在while语句的结尾和条件评估之间:
if(System.currentTimeMillis() == finish)
,时间持续流逝。因此,您应该使用:
if(System.currentTimeMillis() >= finish){