逻辑问题 A 或 C(C 和 B)

Logic Issue A or C (C and 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);

但这是错误的...

尝试使用如下的 switch 语句:

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

您可以按如下方式更改代码:

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

为什么不使用默认值和一个 if,如下所示:

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

我知道 switch 是更好的选择。但以防万一.....

如果您需要跟踪状态(isMouseDown 在您的情况下),通常更容易(并且更好)将该状态与使用该状态的功能一起封装在对象中。

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;
    }
}

您仍然可以按照最初编写代码的方式编写代码。这是逻辑。

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

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