JAVA中的if语句太多了

时间:2016-07-25 21:45:00

标签: java oop

您好我试图制作一个用户可以输入不同命令的java程序,这个类可以识别所有命令,并根据它调用3-4个不同类的方法。目前,对于每个命令,我都有不同的if语句:

if (input.equals("change category FOOD"){...}
if (input.equals("Sort by price FOOD"){...}
if (input.equals("logout"){...}

有很多命令,我想知道是否有办法缩短它。

5 个答案:

答案 0 :(得分:0)

使用带字符串的switch语句会自动实现string.equals方法:

    switch(input) {
        case "change category FOOD":
           statement;
           break;
        case "Sort by price FOOD":
           statement;
           break;
        case "logout":
           statement;
           break;
        default:
           statement;
     }

“声明”代表您在问题中提出的{...}。

当你的if / else语句开始堆积时,这是一个不错的选择。不要忘记添加default:案例。在没有任何案例得到满足的情况下,它作为最终的“其他”陈述。

答案 1 :(得分:0)

扩展@Jim Garrison的评论,

使用Map,其中第一个类型是字符串,表示命令,第二个类型是您可以运行的类。如果您不需要任何命令,则使用Runnable,并为每个命令编写Runnable实现,并在setup函数中创建映射条目。

如果您需要更多信息,请创建具有onCommand(...)方法的n接口SomeInterface,并传递必要的数据。再次,为每个命令添加一个实现,并将命令的每个映射添加到命令运行器到映射。因此,运行正确的命令实现只是

map.get("命令&#34)。按需(...);

答案 2 :(得分:0)

创建Map<String,Function>

将String键设置为命令,并根据需要设置Function

然后,您可以通过从地图中调用它来执行该功能。

答案 3 :(得分:0)

其他答案建议使用map,这当然是可行的。然而,它有几个潜在的缺点:

  • 您永远被限制在equals以匹配命令与行动
  • 你需要一张单身人士地图
  • 可能难以测试 - 例如模拟命令意味着暴露单例

封装一组命令的另一种可能方法是使用带有runnable变量的enum。例如:

public enum Command {
    CHANGE_CATEGORY("change category", () -> {
        // change category
    }),
    SORT_BY_PRICE("sort by price", () -> {
        // sort by price
    }),
    ...
    DEFAULT("", () -> {
        // default action
    });

    private final String commandText;
    private final Runnable action;

    Command(String commandText, Runnable action) {
        this.commandText = commandText;
        this.action = action;
    }

    public static void run(String text) {
        Arrays.stream(values())
            .filter(c -> c.commandText.equals(text))
            .findAny().orElse(DEFAULT)
            .action.run();
    }
}

用作:Command.run(text)

这允许您将与命令关联的所有逻辑放在一个位置,并通过更改过滤器轻松更改匹配文本的逻辑(例如,忽略空格,大小写)。这个枚举也是一个单例,但语言正在处理何时初始化它的所有复杂性。

答案 4 :(得分:-1)

嗯,首先,每次你处理输入时,你都会检查每个if语句。使用if / else if来保持代码更清晰,更高效

if (input.equals("Hi") { 
... 
}
else if (input.equals("Hi") { 
...
}

等等。

您还要求输入与半长字符串完全匹配。这几乎从未在实践中发生,您应该要求更短的参数,使用

将字符串拆分为数组
String newString = string.split(" ");

最后,尽量保持代码尽可能干净。您可能无法缩短支票,因此只需保持代码可读性,不要将大量代码放在一个地方。