2012-09-09 35 views
0

檢查以前的值有沒有愚蠢的問題 - 這是我的摩托。開始。 我知道它的簡單,但我只是不容似乎完全理解,是什麼讓之間的區別:如果循環 - 對新

double previousLocation = e.getX(); 
    if (e.getX() != previousLocation); 

,並改變的變量

double previousLocation = e.getX(); 
    if (previousLocation != e.getX()); 

e.getX簡單地套位置鼠標在屏幕上的位置。我有一個圖形對象,我的鼠標移動。在第一個例子中,第二個例子不起作用。

+0

您需要提供更多的信息。在單線程環境中,這兩個if語句都不應該評估爲true。什麼是更新'E'?這兩行代碼實際上是一起出現的,還是你省略了一堆代碼?請問'e.getX()'調用有一個副作用,即改變'previousLocation'的價值? – paddy

+0

e是一個用戶接口事件和當用戶移動鼠標時不斷更新。所以當用戶移動鼠標 - 該值不等於previousValue。我將對象移動到新的鼠標位置 –

+0

是什麼)的getX的簽名(? –

回答

0
previousLocation != e.getX() 

相當於

e.getX() != previousLocation 
0

這裏唯一的不同是,當你調用e.getX()的第二次。如果你把它放在if語句的第二部分,e.getX()稍後會稍微評估一下。在這段時間,鼠標可能稍微移動一些,搞亂了你的模糊意圖。

另一個要考慮的是,在大多數語言雙打不是100%準確,比較雙打時,像你這樣,你應該使用的埃普西隆:

double epsilon = 0.0000001; 
if(previousLocation>=e.getX()-epsilon && previousLocation<= e.getX()+epsilon) 
    //evaluate 
0

它通常儲存先前的位置後於確定它已經改變。

void EventHandler(MouseEvent & e) 
{ 
    static double previousLocation = e.getX(); 
    double currentLocation = e.getX(); 

    if(previousLocation != currentLocation) { 
     // Take whatever action you need to 
     //... 

     previousLocation = currentLocation; 
    } 
}