1. ホーム
  2. java

[解決済み] ロングを参照できない

2022-02-02 01:22:59

質問

Long cannot be dereferenced"という厄介な問題を解決するために、ほとんどすべてのことをやりましたが、何もうまくいきませんでした。どなたか助けていただけませんか?問題は、私がプログラムがタイムアウトしたかどうかをチェックするときに 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) というように、時間がどんどん経過していきます。

だから、むしろ.NETを使うべきでしょう。

 if(System.currentTimeMillis() >= finish){