読者です 読者をやめる 読者になる 読者になる

知ることは、たのしい。

入門レベルの情報系学生が勉強する。同じ分野に初めて興味を持った人への参考になればいいなあ

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にはプリミティブ型とそれ以外とで
引数として渡した時の挙動が違うのでした。

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