长不能被解除引用

时间:2017-05-20 18:55:04

标签: java

我做了几乎所有事情来解决烦恼的问题" Long无法解除引用",但任何事情都有效。因此,任何人都可以,请帮帮我?问题是当我检查程序是否在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.");}
        }
    }

1 个答案:

答案 0 :(得分:3)

System.currentTimeMillis()返回原始long而非对象Long。 因此,您无法调用longValue()方法或其上的任何方法,因为原语不能成为方法调用的对象。

此外,调用longValue()是没用的,因为System.currentTimeMillis()已经返回一个long值。

这样更好:

    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){