メソッドで操作されているxとの値は、それを呼び出しているメソッドには表示されません。これは、 Java がメソッド引数を値で渡すためです。yrotate
したがって、メソッドで変更されているxandのy値はローカル コピーであるため、範囲外になると (つまり、メソッドから呼び出し元のメソッドにrotate戻ると)、 andの値は消えます。rotatexy
したがって、現在、何が起こっているかは次のとおりです。
x = 10;
y = 10;
o1 = new obj();
o1.a = 100;
rotate(x, y, obj);
System.out.println(x); // Still prints 10
System.out.println(y); // Still prints 10
Java でメソッドから複数の値を取得する唯一の方法は、オブジェクトを渡し、渡されたオブジェクトを操作することです (実際には、メソッド呼び出しが行われると、オブジェクトへの参照のコピーが渡されます)。
たとえば、次rotateを返すように再定義しPointます。
public Point rotate(int x, int y, double angle)
{
// Do rotation.
return new Point(newX, newY);
}
public void callingMethod()
{
int x = 10;
int y = 10;
p = rotate(x, y, 45);
System.out.println(x); // Should print something other than 10.
System.out.println(y); // Should print something other than 10.
}
とはいえ、ピエールが示唆するように、私の意見ではAffineTransformを使用する方がはるかに簡単です。
たとえば、Rectangleオブジェクトを作成して回転させるにAffineTransformは、次のようにします。
Rectangle rect = new Rectangle(0, 0, 10, 10);
AffineTransform at = new AffineTransform();
at.rotate(Math.toRadians(45));
Shape rotatedRect = at.createTransformedShape(rect);
AffineTransformインターフェイスを実装するクラスに適用できShapeます。実装するクラスのリストはShape、リンクされたインターフェイスの Java API 仕様に記載されていShapeます。
AffineTransform使用方法と Java 2Dの詳細については、次を参照してください。