Java 大量if语句的快速替代方案
我是java的初学者,我正在制作一个简单的程序,我在其中键入一些内容,如果我键入的内容与“数据库”中的某个内容匹配,那么它将打印一些文本。是否有比执行此操作更简单的检查方法:Java 大量if语句的快速替代方案,java,if-statement,Java,If Statement,我是java的初学者,我正在制作一个简单的程序,我在其中键入一些内容,如果我键入的内容与“数据库”中的某个内容匹配,那么它将打印一些文本。是否有比执行此操作更简单的检查方法: int 1; int 2; int 3; 等等 400次。使用switch语句或HashMap Switch语句:可读,但编译方式与if-else链类似(如果不相同) switch([USER_INPUT]) { case 1: System.out.println("TEST");
int 1;
int 2;
int 3;
等等
400次。使用switch语句或HashMap Switch语句:可读,但编译方式与if-else链类似(如果不相同)
switch([USER_INPUT]) {
case 1:
System.out.println("TEST");
break;
case 2:
System.out.println("HELLO");
break;
// And so on.
}
:可读性更强,更简单。这是首选
// Initialization.
Map<Integer,String> map = new HashMap<Integer,String>();
map.put(1,"TEST");
map.put(2,"HELLO");
// Printing.
String s = map.get(USER_INPUT);
if (s == null)
System.out.println("Key doesn't exist.");
System.out.println(s);
//初始化。
Map Map=newhashmap();
地图放置(1,“测试”);
放(2,“你好”);
//印刷。
字符串s=map.get(用户输入);
如果(s==null)
System.out.println(“密钥不存在”);
系统输出打印项次;
使用开关
语句
switch(i){
case 1:
System.out.println("Hi");
break;
case 2:
System.out.println("Ok");
break;
// ...
}
使用哈希映射,键为整数,值为文本
System.out.println(myMap.get(USER_INPUT));
你在哪里做了myMap.put(1,“TEST”)代码>等等,这会使您的代码更加面向对象
switch和if的基本字节码非常相似,个人认为切换到switch没有任何好处(除非你想失败,这意味着不要包含break语句)。你可以使用switch语句
switch(i){
case 1:
System.out.println("Hi");
break;
case 2:
System.out.println("Ok");
break;
// ...
}
这里有一个快速教程和一些更深入的解释。
另一个有趣的选择是使用枚举。如果要定义一个类中的所有值,这将起作用。它将简化用于获取文本值的代码。除了switch语句之外,它还为您提供了一些更有趣的选项
enum NumberText {
HELLO(1),
WORLD(2);
private static final HashMap<Integer,NumberText> map = new HashMap<Integer,NumberText>();
static{
for (ConnectionGenerator c : ConnectionGenerator.values()) {
map.put(c.code, c);
}
}
Integer code;
NumberText(Integer pCode) {
this.code = pCode;
}
Static ConnectionGenerator getTextFor(Integer code) {
return map.get(code);
}
}
您可以使用fancier,在枚举中添加一个额外的构造函数变量,并拥有一个特定的文本字符串
enum NumberText {
HELLO(1, "Hello to You"),
GOODBYE(2, "Goodbye");
private static final HashMap<Integer,NumberText> map = new HashMap<Integer,NumberText>();
static{
for (ConnectionGenerator c : ConnectionGenerator.values()) {
map.put(c.code, c);
}
}
Integer code;
String text;
NumberText(Integer pCode, String pText) {
this.code = pCode;
this.text = pText;
}
ConnectionGenerator getNumberTextFor(Integer code) {
return map.get(code);
}
getText() {
return this.text;
}
}
您可以使用开关,或将int/strings/anywhere映射到actions(Runnable
,函数
,等等)。你能添加一个层次结构来将400个命令分成子组吗?如果其中一个答案回答了你的问题,那么将其标记为答案。或者添加注释以便人们可以改进他们的答案。为什么这比If更好?我应该详细说明哈希图。@Nimchinpsky它是“大量If语句的快速替代方案”。在枚举上特别强大,在枚举中可以轻松演示完全覆盖。向读者保证不会使用更复杂的条件,如i<5&&length>6
,因此无需详细阅读案例。忽略导致错误的中断是一个已知的问题,理想情况下编译器会警告您这一点。主题可读性是唯一的优势?使用哈希映射。@djechlin枚举?使用枚举映射。调换和假摔一样糟糕,伊莫。
enum NumberText {
HELLO(1, "Hello to You"),
GOODBYE(2, "Goodbye");
private static final HashMap<Integer,NumberText> map = new HashMap<Integer,NumberText>();
static{
for (ConnectionGenerator c : ConnectionGenerator.values()) {
map.put(c.code, c);
}
}
Integer code;
String text;
NumberText(Integer pCode, String pText) {
this.code = pCode;
this.text = pText;
}
ConnectionGenerator getNumberTextFor(Integer code) {
return map.get(code);
}
getText() {
return this.text;
}
}
NumberText.getNumberTextFor(USER_INPUT).getText();