1

私はJavaでヌルポインタエラーに問題があり、ブレイクアウトゲームを作ろうとしていますが、何が問題なのかを知っています。

    GObject collider = getElementAt( ballX, ballspeed);

    if(collider.equals(paddle) && collider){
        ballspeed = -ballspeed;
    }

if ステートメントが null の場合、プログラムはエラーを受け取ります。

私もこれを試してみましたが、うまくいきません

    GObject collider = getElementAt( ballX, ballspeed);

    if(collider.equals(paddle) && collider != null){
        ballspeed = -ballspeed;
    }
4

5 に答える 5

4

他の方法を試してください:

if(collider != null && collider.equals(paddle) ){
        ballspeed = -ballspeed;
    }

javaの演算子についてもっと読む

于 2013-02-06T20:15:47.997 に答える
1

nullを呼び出す前に、-checkを実行する必要がありますequals(..)。条件は左から右に評価されます。最初の条件がfalseの場合&&、他の条件が何であるかに関係なく、真になることはできなくなるため、他の条件はまったく評価されません。

  if(collider != null && collider.equals(paddle)){
    ballspeed = -ballspeed;
  }

評価の順序に不安がある場合は、次のこともできます。

  if(collider != null){
      if(collider.equals(paddle)){
          ballspeed = -ballspeed;
      }
  }
于 2013-02-06T20:16:31.753 に答える
1

他の人が言ったように:

if(collider != null && collider.equals(paddle) ) {

トリックを行う必要があります。したがって、この形式の式:

if (condition1 && condition2)

condition2 は、condition1 が true の場合にのみ評価されます。この場合、条件 1 が null の場合、条件 2 は評価されず、これにより null ポインター例外が回避されます。

于 2013-02-06T20:36:25.953 に答える
0

これを試して

if(collider != null  &&  collider.equals(paddle) )  

これはうまくいくはずです。

于 2013-02-06T20:24:35.330 に答える
0

2 番目の if ステートメントの順序を次のように変更してみてください。

if(collider != null && collider.equals(paddle))

ステートメントが左から右に評価される場合、collider が null の場合、最初のステートメントは false と評価され、2 番目のステートメントは実行されません。あるいは、次のようなこともできます

if(collider == null) {
    //do nothing or attempt to get non null collider
}
else if(collider.equals(paddle))
{
   ballspeed = -ballspeed;
}
于 2013-02-06T20:20:25.173 に答える