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

Java 逻辑问题A或C(C和B),java,logic,operation,Java,Logic,Operation,我得到了拖放事件的以下代码: 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("m

我得到了拖放事件的以下代码:

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语句:

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

尝试使用如下所示的switch语句:

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

尝试使用如下所示的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;
    }

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

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

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

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

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

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

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

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

我知道切换是个更好的选择。但以防万一……

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

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

我知道切换是个更好的选择。但以防万一……

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

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

我知道切换是个更好的选择。但以防万一……

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

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

我知道切换是个更好的选择。但以防万一……

如果您需要跟踪状态(
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;
    }
}

如果需要跟踪状态(
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;
    }
}

如果需要跟踪状态(
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;
    }
}

如果需要跟踪状态(
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);

您仍然可以用与最初编写代码类似的方式编写代码。逻辑是这样的

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

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

您仍然可以用与最初编写代码类似的方式编写代码。逻辑是这样的

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

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

您仍然可以用与最初编写代码类似的方式编写代码。逻辑是这样的

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

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


一个开关可能比一个长逻辑表达式好。在这种情况下,开关是“专业的”吗?是的,开关是@user3369579A您想要做的事情。一个开关可能比一个长逻辑表达式好。在这种情况下,开关是“专业的”吗?是的,开关是您想要做的@user3369579A开关可能比长逻辑表达式更好。在这种情况下开关是“专业的”吗?是的,开关是您想要做的@user3369579A开关可能比长逻辑表达式更好。在这种情况下开关是“专业的”吗?是的,切换是您在@user3369579处要执行的操作。回答得好。注意:如果你想让它保持为空,你可以删除
default
子句。回答得好。注意:如果你想让它保持为空,你可以删除
default
子句。回答得好。注意:如果你想让它保持为空,你可以删除
default
子句。回答得好。注意:如果你想让它一直为空,你可以完全删除
default
子句。最好写(“mousedown.equals”(“vent.getType())“mousedown”永远不会为空。所以你永远不会有NPE,如果vent.getType()为空,它仍然是假的。在你的代码中,
thisMove(event)
将永远不会执行,因为当程序控件进入if(event.getType().equals(“mousemove”)时,
isMouseDown
为false@d\u air,如果mousedown事件发生,为什么会为false?这不是OP想要的。它应该只在mousedown的情况下为true,否则为false?我刚开始时将其设置为false,只有在mousedown发生时才为true…@code如果mousemove事件发生,
isMouseDown
变量为false,因为程序控制l不会执行语句
isMouseDown=true;
。在OP的逻辑中,如果发生mousemove事件,则根据它的旧值,
isMouseDown
可能为true。因此OP的代码有机会执行
thisMove(事件)
。更好地编写(“mousedown”。等于(“vent.getType())“mousedown”从不为null。因此,您永远不会有NPE,如果vent.getType()为null,它仍然为false。在您的代码中,
thisMove(event)
将永远不会执行,因为当程序控件进入
if(event.getType().equals(“mousemove”)时,
isMouseDown
为false
@d\u air,如果mousedown事件发生,为什么会为false?这不是OP想要的。它应该只在mousedown的情况下为true,否则为false?我刚开始时将其设置为false,只有在mousedown发生时才为true…@code如果mousemove事件发生,
isMouseDown
变量为false,因为程序控制l不会执行语句
isMouseDown=true;
。在OP的逻辑中,如果发生mousemove事件,则根据其旧值,
isMouseDown
可能为true。因此OP的代码有机会执行
thisMove(event)
。更好地编写(“mousedown.equals”(“vent.getType())“mousedown从不为null。因此,您永远不会有NPE,如果vent.getType()为null,它仍然为false。在您的代码中,
thisMove(event)
将永远不会执行,因为当程序控件进入
if(event.getType().equals(“mousemove”)时,
isMouseDown
为false
@d\u air,如果mousedown事件发生,为什么会为false?这不是OP想要的。只有在mousedown事件发生时才为true,否则为false?我刚开始时将其设置为false,只有在mousedown事件发生时才为true…@Codeek如果mousemove事件发生,则
为mousedown<