逻辑问题 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);
我得到了以下用于拖放事件的代码:
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);