2013-10-17 17 views
5

Bir Vector2D'nin bir kutu içinde olup olmadığını kontrol etmek için aşağıdaki ifadeye sahibim ve IntelliJ bana bir uyarı verir: "eğer ifade basitleştirilebilirse".Java: ifade basitleştirilebilir (kutu noktası içerir)

if(point.x < minX || point.x > maxX || point.y < minY || point.y > maxY) 
    return false; 

Bunu nasıl basitleştirebilirim?

cevap

11

Muhtemel bir basitleştirme göremiyorum. Sadece uyarıyı görmezden gelirim. Eğer yöntem böyle bakarsak Ancak:


Güncelleme

if(point.x < minX || point.x > maxX || point.y < minY || point.y > maxY) 
    return false; 
return true; 

buna sen bunu değiştirmek olabilir: Hatta

return !(point.x < minX || point.x > maxX || point.y < minY || point.y > maxY); 

Veya:

return point.x >= minX && point.x <= maxX && point.y >= minY && point.y <= maxY; 

I d Bu, insanlar için "basitleştirilmiş" olup olmadığını bilmiyorum.

+0

Gerçekten de durum buydu. İfadenin içinde bir sadeleştirme için yalvarıyordum. Bu yüzden bulamadım. Son önerinle gittim; bana daha mantıklı geldi. – kiel814

0

İfadeler ikiye ayırmayı deneyin: "x" koordinatları için bir, "y" için bir tane.

if(point.x < minX || maxX < point.x) 
    return false; 
else if(point.y < minY || maxY < point.y) 
    return false; 
+0

Bu, OP'nin sorduğu ile eşdeğer değildir. – Smit

3

IntelliJ olası bir basitleştirme konusunda uyardı zaman, genellikle (sarı ampul tıklayarak) basitleştirilmesi gerçekleştirmek sunuyor. Bunu yaparsan ne olur?

return new Rectangle(minX, maxX, minY, maxY).contains(point); 

Bildiğim kadarıyla bir boolean cebir perspektiften basitleştirilmesi gibi, sen Martin'in yanıt arıyor gerekir:

+0

Sürümümde hiç ampul yoktu, ancak tıklanabilir bir araç ipucu vardı. Teşekkürler! – kiel814

+0

Çok teşekkürler ... benim için çalışıyor –

0

Belki böyle bir şey deneyebilirsiniz. Aslında, bunu basitleştirmeniz bile gerekmez çünkü derleyici sizin için otomatik olarak yapacaktır. Örneğin, !(a && b)!a || !b'a sadeleştirecektir, çünkü her bir değişkeni geçici bir değişken oluşturmanın tersine daha hızlı kontrol etmek ve bunun değerini kontrol etmek daha hızlıdır.