0

If an answer on this already exist, my apologies i've not found on this question...

is this statement correct if i want presice actions on integers from -2 to 0, and for those between 1 and 6 apply the same methods with only my integer who'll change ?

Like this:

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

Please don't be too harsh on me i've started to learn dev only a few month ago

4 Answers4

1

That will do what you are describing. Typically, when multiple cases do the same thing it is formatted like this:

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 !");
}
Danny
  • 354
  • 1
  • 5
1

if you have that few cases, the easier (and more efficient method is a series of if statements

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 !");
}
Adam Yost
  • 3,616
  • 23
  • 36
0

Yes, it's right. Consider this function, if you want reduce code.

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

So you can reduce to:

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

Where foo is something meaningful (don't know your application)

F. Böller
  • 4,194
  • 2
  • 20
  • 32
  • indeed this one's sweet i have to create a ... don't know the english name, this "awesome" windows game with bombs. Actually i just write (b)omb or (f)lag but will replace all of this with .jpg. This is why i've looked for switch instead of if/else, this seemed more efficient and/or practical (not sure for this word sorry) – Laurent Fournier Jun 05 '14 at 16:28
0

Although case statements and if/else statements are both good and solid solutions, perhaps table-driven methods would be a better alternative in this situation:

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;
}
Community
  • 1
  • 1
Drake Sobania
  • 484
  • 3
  • 15