メソッドで操作されているx
との値は、それを呼び出しているメソッドには表示されません。これは、 Java がメソッド引数を値で渡すためです。y
rotate
したがって、メソッドで変更されているx
andのy
値はローカル コピーであるため、範囲外になると (つまり、メソッドから呼び出し元のメソッドにrotate
戻ると)、 andの値は消えます。rotate
x
y
したがって、現在、何が起こっているかは次のとおりです。
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の詳細については、次を参照してください。