如何减少此处使用的“if”语句的数量?

时间:2015-11-17 00:05:27

标签: java if-statement

回答

感谢您的帮助!

我正在为我的AP计算机科学课程编写一些代码,我想知道是否有更有效的方法来做到这一点。该方法非常冗长且冗余。我将非常感谢您所做的改进的解释!

public void setColor(){

    if(sequenceNum == 0){
        myColor = Color.RED;
    }
    if(sequenceNum == 1){
        myColor = Color.ORANGE;
    }
    if(sequenceNum == 2){
        myColor = Color.YELLOW;
    }
    if(sequenceNum == 3){
        myColor = Color.GREEN;
    }
    if(sequenceNum == 4){
        myColor = Color.BLUE;
    }
    if(sequenceNum == 5){
        myColor = Color.MAGENTA;
    }

}

7 个答案:

答案 0 :(得分:5)

switch语句是一个想法,但如果序列号密集,我会使用查找表:

final Color[] myColors = {Color.RED, Color.ORANGE, Color.YELLOW, ...};

myColor = myColors[sequenceNum];

在检查范围sequenceNum之后

请注意,除了第一个else之外,原始代码应该在if之前$(this).text(full_text); 。比赛结束后重新测试没有意义。

答案 1 :(得分:3)

你可以做到

Color[] colors = {Color.RED, Color.ORANGE, Color.YELLOW...};
myColor = colors[sequenceNum];

答案 2 :(得分:2)

Java switch语句是您正在寻找的:

https://docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.html

switch (sequenceNum) {
  case 0:
    myColor = Color.RED;
    break;
  case 1:
    myColor = Color.ORANGE;
    break;
....SNIP...
}

答案 3 :(得分:1)

public static Color[] MAP_SEQNUM_TO_COLOR = {
  Color.RED, 
  Color.ORANGE, 
  Color.YELLOW, 
  Color.GREEN, 
  Color.BLUE, 
  Color.MAGENTA
};

public void setColor(){
  if( (0 <= sequenceNum) && (sequenceNum <= 5)) {
    myColor = MAP_SEQNUM_TO_COLOR[sequenceNum];
  }
}

免责声明:未经测试,最好将其视为伪代码。我在C#领域比在Java方面更活跃,但是这个想法应该很清楚。

答案 4 :(得分:0)

使用switch

switch ( sequenceNum ) {

case 0:
    // Do something
    break;

case 1:
    // Do something else
    break;

default:
    // Do a default something
    break;
}

答案 5 :(得分:0)

public void setColor(){
  switch(sequenceNum){
    case 0:
      myColor = Color.RED;
      break;
    case 1:
      myColor = Color.ORANGE;
      break;
    case 2:
      myColor = Color.YELLOW;
      break;
    case 3:
      myColor = Color.GREEN;
      break;
    case 4:
      myColor = Color.BLUE;
      break;
    case 5:
      myColor = Color.MAGENTA;
      break;
  }
}

但这也很丑陋Reimeus提供的答案更优雅,只需确保检查0&lt; = sequenceNum&lt; 5以避免获得arrayoutofboundsexception。我猜你正在学习,所以你应该查看维基以获取有用的资源:https://stackoverflow.com/tags/java/info。有关控制流的更多信息,请参阅javadoc:https://docs.oracle.com/javase/tutorial/java/nutsandbolts/flow.html

祝你好运

答案 6 :(得分:-1)

如果通过&#34;减少&#34;如果&#34;语句&#34;你的意思是字面意思,然后你可以使用一个开关,但这相当于代码运行时执行的类似测试序列。另一方面,如果您真正想要的是减少测试量,那么更清晰的解决方案是使用数组(正如其他人已经建议的那样),特别是因为您的示例代码暗示每种颜色都与整数。