我几乎用“不能取消引用长”来解决烦人的问题,但是一切都解决了。因此,有人可以帮我吗?问题是当我检查程序是否在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)语句中的trueSystem.currentTimeMillis() == finish也不能是while:
    while (found<3 && System.currentTimeMillis() < finish) {
        Command command = parser.getCommand();
        processCommand(command);
    }

因为在while语句的结尾和条件评估之间:
if(System.currentTimeMillis() == finish),时间持续流逝。

因此,您应该使用:
 if(System.currentTimeMillis() >= finish){

10-06 10:02