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



如果这个问题的答案已经存在,我很抱歉我没有找到关于这个问题的答案…

如果我想对从-2到0的整数进行精确操作,并且对于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 !");
        }
    }

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

这将做你所描述的。通常,当多个case做同样的事情时,它的格式是这样的:

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 !");
}

如果有那么几种情况,更简单(也更有效)的方法是一系列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 !");
}

是的,它是对的。如果你想减少代码,可以考虑使用这个函数。

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是有意义的(不知道你的应用程序)

虽然case语句和if/else语句都是很好的可靠的解决方案,但在这种情况下,表驱动的方法可能是更好的选择:

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;
}

最新更新