知ることはたのしい

"車輪の再発明"は時間がもったいないと思うから"車輪の設計図"を置いて学習の効率化に役立ちたい。そしてもっと素晴らしいものを開発してくれないかな。

Javaで引数の渡し方で勘違いしていたこと(前置き)


課題と暇をつぶすためにペイントみたいなものを作っていて、

ドラッグの始点と終点の座標で円をかけるようにしたんですが、問題が発生・・・

 

始点から右・下(座標正の方向)にドラッグする場合は問題なく円が描けるのに

左・上(座標負の方向)にドラッグした時にうまく描けませんでした。

これは、描画メソッドdrwOval(int x, int y, int width, int hight)が、

(x,y)を左上の頂点とする幅width,高さhightの長方形に収まる楕円を描くためで

下のような記述をしていたためうまくいきませんでした。

//st:始点 gl:終点でMoueseEventから取得する
Point st, gl;

//gl.x<st.x か gl.y<st.yのとき引数が負になって描画できない
drwOval(st.x, st.y, gl.x - st.x, gl.y - st.y);

そこで2点を対角線としたときにこれらの座標を組み換えて、

st:左上, gl:右下になるように設定し直したんですが、

いざマウスドラッグすると、始点がずれて直線になってしまいます・・・。
f:id:lenia23:20160704103230j:plain

で、

どうやらメソッドへの引数の渡し方に勘違いがありました。
恥ずかしいことにJavaにはプリミティブ型とそれ以外とで
引数として渡した時の挙動が違うのでした。

違いについて自分の理解のためにもまとめるのでここで分割します。
まとめへ