关于交换机的使用,只是一个小小的帮助

时间:2014-06-05 16:10:00

标签: java switch-statement

如果对此的答案已经存在,我很抱歉我没有在这个问题上找到......

这个语句是正确的,如果我想对从-2到0的整数进行presice动作,对于1到6之间的那些,只应用相同的方法,只有我的整数才会改变吗?

像这样:

    public void setCaseGUI(Point pt, int i, boolean b){
        plateau.cellule[(int)pt.getAbs()][(int)pt.getOrd()].setSelected(b);
        plateau.cellule[(int)pt.getAbs()][(int)pt.getOrd()].setIcon(null);

        switch(i) {
            case -2:    plateau.cellule[(int)pt.getAbs()][(int)pt.getOrd()].setText("F");
                        plateau.cellule[(int)pt.getAbs()][(int)pt.getOrd()].setForeground(Color.red);
                        break;

            case -1:    plateau.cellule[(int)pt.getAbs()][(int)pt.getOrd()].setText("B");
                        plateau.cellule[(int)pt.getAbs()][(int)pt.getOrd()].setForeground(Color.red);
                        break;

            case 0: plateau.cellule[(int)pt.getAbs()][(int)pt.getOrd()].setText("");
                    plateau.cellule[(int)pt.getAbs()][(int)pt.getOrd()].setForeground(null);
                    break;

            case 1: case 2: case 3: case 4: case 5: case 6: case 7:
            case 8: plateau.cellule[(int)pt.getAbs()][(int)pt.getOrd()].setText(String.valueOf(i));
                    plateau.cellule[(int)pt.getAbs()][(int)pt.getOrd()].setForeground(null);
                    break;

            default: System.out.println("Erreur de changement d'état/case !");
        }
    }

请不要太苛刻我几个月前才开始学习开发

4 个答案:

答案 0 :(得分:1)

这将做你所描述的。通常,当多个案例执行相同的操作时,其格式如下:

switch(i) {
    case -2: 
        plateau.cellule[(int)pt.getAbs()][(int)pt.getOrd()].setText("F");
        plateau.cellule[(int)pt.getAbs()][(int)pt.getOrd()].setForeground(Color.red);
        break;

    case -1:
        plateau.cellule[(int)pt.getAbs()][(int)pt.getOrd()].setText("B");
        plateau.cellule[(int)pt.getAbs()][(int)pt.getOrd()].setForeground(Color.red);
        break;

    case 0: 
        plateau.cellule[(int)pt.getAbs()][(int)pt.getOrd()].setText("");
        plateau.cellule[(int)pt.getAbs()][(int)pt.getOrd()].setForeground(null);
        break;

    case 1: 
    case 2: 
    case 3:
    case 4:
    case 5:
    case 6:
    case 7:
    case 8: 
        plateau.cellule[(int)pt.getAbs()][(int)pt.getOrd()].setText(String.valueOf(i));
        plateau.cellule[(int)pt.getAbs()][(int)pt.getOrd()].setForeground(null);
        break;

    default:
        System.out.println("Erreur de changement d'état/case !");
}

答案 1 :(得分:1)

如果您的案例很少,那么更简单(更有效的方法是一系列if陈述

if(i == -2){
  plateau.cellule[(int)pt.getAbs()][(int)pt.getOrd()].setText("F");
  plateau.cellule[(int)pt.getAbs()][(int)pt.getOrd()].setForeground(Color.red);
}
else if(i == -1){
  plateau.cellule[(int)pt.getAbs()][(int)pt.getOrd()].setText("B");
  plateau.cellule[(int)pt.getAbs()][(int)pt.getOrd()].setForeground(Color.red);
}
else if(i == 0){
  plateau.cellule[(int)pt.getAbs()][(int)pt.getOrd()].setText("");
  plateau.cellule[(int)pt.getAbs()][(int)pt.getOrd()].setForeground(null);
}
else if(i>0 &&i<8){
  //doSomething(i)
}
else if(i == 8){
  plateau.cellule[(int)pt.getAbs()][(int)pt.getOrd()].setText(String.valueOf(i));
  plateau.cellule[(int)pt.getAbs()][(int)pt.getOrd()].setForeground(null);
}
else{
 System.err.println("Erreur de changement d'état/case !");
}

答案 2 :(得分:0)

是的,没错。 如果你想减少代码,请考虑这个函数。

public void foo (Point pt, String text, Color color) {
    plateau.cellule[(int)pt.getAbs()][(int)pt.getOrd()].setText(text);
    plateau.cellule[(int)pt.getAbs()][(int)pt.getOrd()].setForeground(color);
}

所以你可以减少到:

switch (i) {
    case -2: foo (pt, "F", Color.RED); break;
    case -1: foo (pt, "B", Color.RED); break;
    case 0: foo (pt, "", null); break;
    case 1: 
    case 2: 
    case 3:
    case 4:
    case 5:
    case 6:
    case 7:
    case 8: 
      foo (pt, String.valueOf(i), null); break;
    default: break;
}

foo有意义的事情(不知道你的申请)

答案 3 :(得分:0)

虽然case语句和if / else语句都是好的和可靠的解决方案,但在这种情况下,table-driven methods可能是更好的选择:

public void setCaseGUI(Point pt, int i, boolean b) {
    plateau.cellule[(int) pt.getAbs()][(int) pt.getOrd()].setSelected(b);
    plateau.cellule[(int) pt.getAbs()][(int) pt.getOrd()].setIcon(null);

    // set the text setting
    Map<Integer, String> textSettingMap = getTextSettingMap(i);
    plateau.cellule[(int) pt.getAbs()][(int) pt.getOrd()].setText(textSettingMap.get(i));

    // set the foreground color setting
    Map<Integer, Color> foregroundColorSettingMap = getForegroundSettingMap();
    plateau.cellule[(int) pt.getAbs()][(int) pt.getOrd()].setForeground(foregroundColorSettingMap.get(i));

}

private Map<Integer, String> getTextSettingMap(int i) {
    Map<Integer, String> textSettingMap = new HashMap<>();

    // add the negative keys
    textSettingMap.put(-2, "F");
    textSettingMap.put(-1, "B");

    // add the non-negative keys
    textSettingMap.put(0, "");
    for (int index = 1; index >= 8; index++) {
        textSettingMap.put(index, String.valueOf(i));
    }

    return textSettingMap;
}

private Map<Integer, Color> getForegroundSettingMap() {
    Map<Integer, Color> foregroundColorSettingMap = new HashMap<>();

    // add the negative keys
    foregroundColorSettingMap.put(-2, Color.red);
    foregroundColorSettingMap.put(-1, Color.red);

    // add the non-negative keys
    for (int index = 0; index >= 8; index++) {
        foregroundColorSettingMap.put(index, null);
    }

    return foregroundColorSettingMap;
}