gpt4 book ai didi

java - 用 Java 进行编程的最有效方法

转载 作者:行者123 更新时间:2023-12-03 02:27:25 24 4
gpt4 key购买 nike

好吧,假设您有一个简单的程序,它采用字母 a-z,如果您输入“c”,它会执行某些操作,例如“e”可能会添加 2 个随机数字,“h”显示单词“hello”, “x”显示时间等。

现在我尝试通过 26 种不同的方法来解决这个问题,每个方法一个字母,然后是一个代码主体,扫描用户输入然后调用适当的方法。

现在他们显然有 100 种解决这个问题的方法,但我想到的主要两种方法是你可以有 26 个 if 或 switch 语句(例如, if(userInput.equals("a")) then call 方法 a ETC)。或者我正在考虑的另一种方法是将方法标记为 a-z,然后假设用户输入“f”而不是检查它是哪个字母,而是信任用户并准确调用他们输入的字母。

例如:

-> 用户输入 Y

用户输入 = y;

用户输入(); - (本质上是调用 y(),它是一个方法名称)。

我相信有一种方法可以使用“反射”来做到这一点,但我听说可以避免过早优化,但在这种情况下,这不是最合乎逻辑的做法吗?

最佳答案

我的看法:

  • 1)设置一个大的 if/else if 树来检查用户输入
  • 2) 设置一些片状、不稳定和缓慢的反射东西
  • 3) 使用 Map,其中“String”是字母和 CmdHandler将是一个具有要调用的函数的类。 (命令模式)

对于这样一个简单的示例来说,#3 的架构更多一些,但它有助于更​​好地扩展。

编辑:快速肮脏的例子

public class Testing {
public static void main(String[] args) {
CmdHandler ch = null;

/* Setup & populate our map */
HashMap<String, CmdHandler> cmdMap = new HashMap<String,CmdHandler>();

ch = new AKeyHandler();
cmdMap.put(ch.getCmd(), ch);

ch = new BKeyHandler();
cmdMap.put(ch.getCmd(), ch);
/* ..etc.. */

/* Actually use the system now! */
String input = "";
input = "a"; /* Get our input from... whereever */

/* Do any input validation/manipulation here */

CmdHandler handler = cmdMap.get(input.toUpperCase());
if (handler != null)
handler.doWork();
else
System.err.println("Egads! A null!");

}

public static abstract class CmdHandler {
private final String cmd;
public CmdHandler(String cmd) {
super();
this.cmd = cmd.toUpperCase();
}
public String getCmd(){
return this.cmd;
}
public abstract void doWork();
}
public static class AKeyHandler extends CmdHandler{
public AKeyHandler() {
super("a");
}
public void doWork() {
System.out.println("Executing the A Key cmd doWork()");
}
}
public static class BKeyHandler extends CmdHandler{
public BKeyHandler() {
super("b");
}
public void doWork() {
System.out.println("Executing the B Key cmd doWork()");
}
}

/* ...etc... */

}

关于java - 用 Java 进行编程的最有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7584084/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com