THINK JAVA: CÁCH SUY NGHĨ NHƯ NHÀ KHOA HỌC MÁY TÍNH - Trang 166

Ch ng h n:

rect.setLocation(rect.getLocation().translate( -rect.getWidth(),

-rect.getHeight()));

Có th đ

c vi t l i thành

ể ượ

ế ạ

int

dx = -rect.getWidth();

int

dy = -rect.getHeight();

Point location = rect.getLocation();

Point newLocation = location.translate(dx, dy);

rect.setLocation(newLocation);

D ng mã l nh chi ti t thì d đ c h n vì tên bi n cho ta b n thân đã giúp gi i thích rõ thêm, và cũng d

ế

ễ ọ ơ

ế

g l i h n vì b n có th ki m tra ki u c a nh ng bi n trung gian cùng vi c hi n th giá tr c a chúng.

ỡ ỗ ơ

ể ể

ể ủ

ế

ị ủ

M t v n đ khác có th x y ra v i nh ng bi u th c l n là th t th c hi n phép tính có th không nh

ộ ấ

ể ả

ứ ớ

ứ ự ự

ư

b n mong mu n. Ch ng h n, đ l

ng giá bi u th c

ể ượ

ứ x / 2π , có th b n đã vi t:

ể ạ

ế

double

y = x / 2 * Math.PI;

Đi u này không đúng vì các phép nhân và chia có cùng th t u tiên và đ

c l

ng giá t trái sang

ứ ự ư

ượ ượ

ph i. Vì v y bi u th c này s tính

xπ / 2.

   

M t cách hay đ g l i bi u th c là thêm vào nh ng c p ngo c đ n đ giúp cho th t l

ng giá đ

c rõ

ể ỡ ỗ

ặ ơ

ứ ự ượ

ượ

ràng:

double

y = x / (2 * Math.PI);

Phiên b n này thì đúng đ n, và d đ c h n đ i v i ng

i không ghi nh th t th c hi n phép toán.

ễ ọ ơ

ố ớ

ườ

ớ ứ ự ự

PH

NG TH C TÔI ĐÃ VI T KHÔNG TR L I GIÁ TR NH D KI N.

ƯƠ

Ả Ạ

Ư Ự

N u b n vi t m t câu l nh return (tr v ) v i m t bi u th c ph c t p, thì b n đã không có c h i in ra

ế

ế

ả ề ớ

ứ ạ

ơ ộ

giá tr này tr

c khi tr nó v . M t l n n a, b n có th dùng bi n t m. Ch ng h n, thay vì

ướ

ộ ầ

ế ạ

public

Rectangle intersection(Rectangle a, Rectangle b) {

return new

Rectangle( Math.min(a.x, b.x), Math.min(a.y, b.y),

Math.max(a.x+a.width, b.x+b.width)-Math.min(a.x, b.x) Math.max(a.y+a.height,

b.y+b.height)-Math.min(a.y, b.y) );

}

b n đã có th vi t

ể ế

public

Rectangle intersection(Rectangle a, Rectangle b) {

int

x1 = Math.min(a.x, b.x);

int

y2 = Math.min(a.y, b.y);

int

x2 = Math.max(a.x+a.width, b.x+b.width);

int

y2 = Math.max(a.y+a.height, b.y+b.height);

Rectangle rect =

new

Rectangle(x1, y1, x2-x1, y2-y1);