嗨我想知道是否有办法让以下不那么多余。 '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;
答案 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");
我怀疑想要调用你的方法可以改变,所以你根本不需要这个方法。