2013-11-27 75 views
0

此方法返回true,false和其他值。如何使用返回2個以上值的布爾方法

public boolean Intersection (Circle circle, Rectangle rectangle) { 

... // test something 
... return true; 
... // test another thing 
... return false; 
... 
... return xCornerDistSq + yCornerDistSq <= maxCornerDistSq; //Third return value 
} 

這是一個2D遊戲,其中一個球應該從矩形反射,包括矩形的邊緣。我上面鏈接的第三個返回值應該是檢測球和矩形邊緣之間的碰撞。問題是,一旦我調用方法,我不知道如何在代碼中使用它。

我現在有是這樣的

這是該方法的全碼:

 public boolean Intersection (Circle circle, Rectangle rectangle) { 
      double cx = Math.abs(circle.getLayoutX() - rectangle.getLayoutX() - rectangle.getWidth()/2); 
      double xDist = rectangle.getWidth()/2 + circle.getRadius(); 

      if (cx > xDist) { return false; } 

      double cy = Math.abs(circle.getLayoutY() - rectangle.getLayoutY() - rectangle.getHeight()/2) ; 
      double yDist = rectangle.getHeight()/2 + circle.getRadius(); 

      if (cy > yDist) { return false; } 

      if (cx <= rectangle.getWidth()/2 || cy <= rectangle.getHeight()/2) { return true; } 

      double xCornerDist = cx - rectangle.getWidth()/2; 
      double yCornerDist = cy - rectangle.getHeight()/2; 
      double xCornerDistSq = xCornerDist * xCornerDist; 
      double yCornerDistSq = yCornerDist * yCornerDist; 
      double maxCornerDistSq = circle.getRadius() * circle.getRadius(); 
      return xCornerDistSq + yCornerDistSq <= maxCornerDistSq; 
     } 

所以,我怎麼去實現它,當我調用函數?我希望我的球也可以跳出邊緣,但我不知道如何使用這種方法調用它。

我現在有這就是:

   boolean intersection = Intersection(circle1, rect1); 
       if (intersection == true) { 
        double x = (rect1.getLayoutX() + rect1.getWidth()/2) - (circle1.getLayoutX() + circle1.getRadius()); 
        double y = (rect1.getLayoutY() + rect1.getHeight()/2) - (circle1.getLayoutY() + circle1.getRadius()); 
        if (Math.abs(x) > Math.abs(y)) { 
         c1SpeedX = -c1SpeedX; 
        } else { 
         c1SpeedY = -c1SpeedY; 
        } 
       } 
      } 
     } 
+2

真的,假的,也許?你可以寫一個枚舉。 –

+3

顯示的代碼將返回兩個可能的值。最後一行將返回true或false。如果您需要返回兩個以上的值,則必須使用不同的類型 - 「boolean」將不起作用 –

+0

對不起,不知道該怎麼做。你能提供一個代碼示例嗎? – Gregg1989

回答

2

您可以返回方法執行的結果表示例如爲int代碼。您的代碼將是這個樣子:

public int Intersection (Circle circle, Rectangle rectangle) { 

... // test something 
... return 0; 
... // test another thing 
... return 1; 
... 
... return (xCornerDistSq + yCornerDistSq <= maxCornerDistSq) ? 2 : 3; 
} 

相反的五言你可以返回枚舉的int。例如,您可以創建並使用以下枚舉作爲方法的返回值:

public enum ReturnCode { 
    CODE1, 
    CODE2, 
    CODE3, 
    CODE4, 
    CODEN; 
} 

代碼如下所示:

public ReturnCode Intersection (Circle circle, Rectangle rectangle) { 

... // test something 
... return ReturnCode.CODE1; 
... // test another thing 
... return ReturnCode.CODE2; 
... 
... return (xCornerDistSq + yCornerDistSq <= maxCornerDistSq) ? ReturnCode.CODE3 : ReturnCode.CODE4; 
} 
+0

真棒回覆,謝謝! – Gregg1989

4

A「假設」枚舉可能看起來像

public enum Ternary { 
    TRUE, FALSE, MAYBE; 
} 
+1

如果MAYBE是由「無法做出決定」等原因造成的,那麼您也可以使用布爾值並返回true,false或null。但我認爲提問者沒有意識到他的代碼只能返回兩個不同的值,就像現在這樣。 – fpw

+0

什麼是括號?只需寫出'public enum Ternary {TRUE,FALSE,MAYBE; }' –

+0

他們只是調用繼承自Object的默認構造函數。它實際上是一樣的。 – ferrerverck