user3369579
user3369579

Reputation: 486

Logic Issue A or C (C and B)

ive got the following code for a drag and drop event:

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

how can i shorten this now with a better logic i tried

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

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

but its wrong...

Upvotes: 0

Views: 93

Answers (5)

d_air
d_air

Reputation: 641

You can still write the code in a similar way you originally you wrote it. Here's the logic.

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

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

Upvotes: 0

OldCurmudgeon
OldCurmudgeon

Reputation: 65851

If you need to keep track of state (isMouseDown in your case) it is generally easier (and better) to encapsualte that state in an object along with the functionality that makes use of that state.

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

Upvotes: 0

Codeek
Codeek

Reputation: 1624

Why not use default value and one if as below :

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

I know switch would be a better option. But just in case.....

Upvotes: 0

Erwan C.
Erwan C.

Reputation: 719

You can change your code as follow:

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

Upvotes: 1

Mark
Mark

Reputation: 4883

Try using a switch statement like the following:

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

Upvotes: 2

Related Questions