java - 压缩类似的 if 语句 (Java)
问题描述
我试图根据传递给类的构造函数的值从 16 个数组中选择一个。输入的值将用于一系列将选择数组的 if 语句。像这样的东西
package Model;
import javax.swing.*;
public class Die extends JButton{
String letters[] = new String[6];
public Die(int number){
Controller con = new Controller();
if(number==1){
for(int i = 0; i<5; i++}{
letters[i] = con.die1[i];
}
}
if(number==2){
for(int i = 0; i<5; i++}{
letters[i] = con.die2[i];
}
}
if(number==3){
for(int i = 0; i<5; i++}{
letters[i] = con.die3[i];
}
}
}
}
(请记住,我没有检查此代码,也没有创建所有 16 个 if 语句)。
基本上我想以某种方式压缩这些 if 语句。有任何想法吗?
解决方案
声明一个Map<Integer, String[]>
将数字与每个die
数组的字符串相关联的 a,您将没有任何条件语句。
Controller con = new Controller();
Map<Integer, String[]> map = new HashMap<>();
map.put(1, con.die1);
map.put(2, con.die2);
map.put(3, con.die3);
if(number>=1 && number<=3){
for(int i = 0; i<5; i++}{
letters[i] = map.get(number)[i];
}
}
正如 Lino 所建议的,您甚至可以将此映射移动到 Controller 类中,这在责任方面更有意义:
private Map<Integer, String[]> map = new HashMap<>();
public Controller(){
map.put(1, die1);
map.put(2, die2);
map.put(3, die3);
}
public String getLetter(int number, int index){
map.get(number)[index];
}
Die
客户现在可能是:
Controller con = new Controller();
if(number>=1 && number<=3){
for(int i = 0; i<5; i++}{
letters[i] = con.getLetter(number, i);
}
}
推荐阅读
- javascript - 我正在尝试使用模式视图在 html 中显示两个不同的文本,但是 javascript 重叠并且无法正常工作
- deep-learning - 为什么需要目标网络?
- lotus-notes - 如何使用 IBM Notes 在本地 Web 浏览器中打开数据库
- c++ - 如何确定 std::ofstream 打开的文件的当前大小?
- c# - 测试动作结果
当 BadRequest() 返回时 - groovy - 在 SoapUI 中使用 Groovy 脚本从 xlsx 文件中读取值
- python - 将字节列表写入文件,但有些记录丢失了
- grails - 如何在 grails 3.3.8 中使用导航 API
- javascript - Javascript:如果对象未传递给函数,则忽略解构对象参数
- visual-studio-code - VS Code:按 Crtl - D 后区分大小写替换