如果声明缩短

时间:2015-02-04 15:02:00

标签: java if-statement refactoring

嗨我想知道是否有办法让以下不那么多余。 'ones','twos','threes'等是实例变量。 (switch语句不允许它们为case参数。)

private int methodX(){

   int consec=0;

    if(ones==1){
        consec++;
    }
    if(twos==1){
        consec++;
    }
    if(threes==1){ 
        consec++;
    }
    if(fours==1){
        consec++;
    }
    if(fives==1){
        consec++;
    }
    if(sixes==1){
        consec++;
    }
    if(consec>=4){
        return 30;
    }
    else {
        return 0;
    }
}
private int ones;
private int twos;
private int threes;
private int fours;
private int fives;
private int sixes;

5 个答案:

答案 0 :(得分:1)

这种情况的一个好方法是编写一个函数而不是ifs。

不是很大的收获,但你可以清楚地了解代码。

实施例

   void incrementIfEqual(int what, int value)
   {
        if (what==value)
             consecs++;
   }

然后你可以

   {
      incrementIfEqual(ones,1);
      incrementIfEqual(twos,1);
      ...
      incrementIfEqual(sixes,1);
   }

这是一个很好的经验法则:如果你可以复制粘贴,你可以创建一个函数。

答案 1 :(得分:1)

我猜你要滚动六个面孔的两个骰子,并试图连续计算相同面孔的数量。 您可以尝试输入面孔,看看它们是否相同。

private boolean Same(int i, int j){
return (a==b);
}

然后每次需要比较时都会调用它。

if(Same(i,j))consec++;

或甚至有一种更简单的方式:

if(i==j)consec++;

如果你不需要在其他地方检查它。

答案 2 :(得分:0)

您可以使用Map或List或数组替换实例变量,然后在循环中处理它:

for (String key : counts){
    if (counts.get(key) == 1
       consec++ 
}

答案 3 :(得分:0)

您可能需要再次检查您的代码。你真的想用几个if或者if-else吗? switch语句完全执行if-else语句的功能。

答案 4 :(得分:0)

不是试图以这种方式推断连续的滚动,而是更简单的方法是检查这个数字,你不需要任何这些代码。

假设你要检查当你掷4个骰子时,你会得到4个不同的卷。

Random rand = new Random();
long uniqueRolls = IntStream.range(0, 4)
                             .map(i -> rand.nextInt(6) + 1)
                             .distinct().count();
if (uniqueRolls == 4)
   System.out.println("They were all different");

我怀疑想要调用你的方法可以改变,所以你根本不需要这个方法。