首页 > 解决方案 > 压缩类似的 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 语句。有任何想法吗?

标签: java

解决方案


声明一个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);
    }
}

推荐阅读