2015-08-18 70 views
0

Ive得到下面的代碼拖放事件:邏輯版本A或C(C和B)

if (event.getType().equals("mousedown")){ 
    isMouseDown = true; 
} 

if (event.getType().equals("mouseup")){ 
    isMouseDown = false; 
} 

if (event.getType().equals("mouseout")){ 
    isMouseDown = false; 
} 

if (event.getType().equals("mousemove")){ 
    if (isMouseDown) 
     thisMove(event);  
} 

我怎樣才能現在縮短此具有更好的邏輯我試圖

isMouseDown = event.getType().equals("mousedown") && !(event.getType().equals("mousemove") && isMouseDown); 

if (event.getType().equals("mousemove") && isMouseDown) 
    thisMove(event); 

但它的錯......

+0

開關可能會比長邏輯表達式更好。 – RealSkeptic

+0

在這種情況下將是一個開關「專業」? – user3369579

+0

是的,一個開關是你想做的事@ user3369579 – Mark

回答

1

你可以改變你的代碼如下:

switch(event.getType()){ 
     case "mousedown": 
      isMouseDown = true; 
      break; 
     case "mouseup": 
     case "mouseout": 
      isMouseDown=false; 
      break; 
     case "mousemove": 
      if(isMouseDown) thisMove(event); 
      break; 
     default: 
      break; 
    } 
+0

好怎麼回答。注意:如果你打算把它留空,你可以完全刪除'default'子句。 – sstan

+0

我知道,但我認爲這是一個好習慣 –

2

嘗試使用switch語句如下所示:

switch(event.getType()) { 
    case "mousedown": 
     code block 
     break; 
    case "mouseup": 
     code block 
     break; 
    default: 
     default code block} 
0

爲什麼不如果如下使用默認值和一個:

isMouseDown = false; 
if (event.getType().equals("mousedown")) 
{ 
    isMouseDown = true; 
} 
if (event.getType().equals("mousemove")) 
{ 
    if (isMouseDown) 
      thisMove(event); 
} 

我知道開關將是一個更好的選擇。但是爲了以防萬一.....

+0

更好的寫(「鼠標按下」 .equals(「vent.getType()) –

+0

OO,我不明白你的意思感覺就像嘲諷...:P。 – Codeek

+0

「鼠標按下」永遠不能爲null,所以你永遠不會有NPE,它仍然是假的,如果vent.getType()爲null。在你的代碼 –

0

如果您需要跟蹤的狀態(isMouseDown你的情況),它通常更容易(更好),以encapsualte中的對象狀態,使得使用的功能以及那個狀態。

class Mouse { 

    boolean down = false; 

    public void event(Event event) { 
     switch (event.getType()) { 
      case MouseDown: 
       down = true; 
       break; 
      case MouseUp: 
      case MouseOut: 
       down = false; 
       break; 

      case MouseMove: 
       if (down) { 
        thisMove(event); 
       } 
       break; 
      default: 
       break; 
     } 
    } 
} 

private static class Event { 

    enum Type { 

     MouseDown, MouseUp, MouseMove, MouseOut; 
    } 

    public Event() { 
    } 

    private Type getType() { 
     return null; 
    } 
} 
0

你仍然可以用你最初編寫它的方式編寫代碼。這是邏輯。

String t = event.getType();   
    isMouseDown = t.equals("mousedown") || !(t.equals("mouseup")) && !(t.equals("mouseout")) && isMouseDown; 

    if (t.equals("mousemove") && isMouseDown) 
     thisMove(event); 
+0

感謝完蛋了,但我認爲一個開關在這種情況下,真正的最佳解決方案 – user3369579

+0

@ user3369579是的,我同意,開關是一個更好的解決了這一點。而且它更容易理解。我只是質疑你的問題的邏輯和你縮短代碼的嘗試。所以我提供了一個有點類似於你的第一次嘗試的工作代碼。以防萬一你喜歡你的方式。 –

相關問題