Java 每次通过循环运行不同的方法
我的目标是通过循环运行此代码来减少代码Java 每次通过循环运行不同的方法,java,loops,switch-statement,case,Java,Loops,Switch Statement,Case,我的目标是通过循环运行此代码来减少代码 each_score = ones(dice_values); total_score += each_score; end_scores += String.valueOf(each_score) + " "; 接 each_score = twos(dice_values); total_score += each_score; end_scores += String.valueOf(each_score) + " "; 唯一的区别是第一行中的方
each_score = ones(dice_values);
total_score += each_score;
end_scores += String.valueOf(each_score) + " ";
接
each_score = twos(dice_values);
total_score += each_score;
end_scores += String.valueOf(each_score) + " ";
唯一的区别是第一行中的方法。我不知道有什么方法可以通过for循环这样的方式来做这件事,我宁愿不复制粘贴代码13次。(如果可能的话,我还希望有比开关盒更有效的东西)
私有静态整数(int[]骰子值){
整数=0;
对于(int i=0;i<5;i++)
如果(骰子值[i]==1)
1++;
返回一个;
}
私有静态整数四(整数[]骰子值){
int-fours=0;
对于(int i=0;i<5;i++)
如果(骰子值[i]==4)
fours++;
返回(四个*4);
}
私有静态int-five类型(int[]骰子值){
int-five_-kind=0;
int[]five_of=新int[5];
对于(int i=0;i<5;i++)
五个[dice_值[i]-1]+;
if(Arrays.asList(五个).contains(5))
五类=50;
还五样;
}
这是这些方法的一个示例。我正在解决一个叫做Yahtzee的简单问题。给定一组13卷5个骰子的骰子,找出所有骰子的总分和每种得分的总分(例如“一个:多少个”或“一种五个”)
for(int i=1;i除非我遗漏了什么(并且没有开关
),您可以构建一个int
分数数组,并迭代该分数数组
int [] scores = new int[] {
ones(dice_values), twos(dice_values), threes(dice_values),
fours(dice_values), fives(dice_values), sixes(dice_values),
sevens(dice_values), eights(dice_values), nines(dice_values),
tens(dice_values), elevens(dice_values), twelves(dice_values),
thirteens(dice_values)
};
for (int each_score : scores) {
total_score += each_score;
end_scores += String.valueOf(each_score) + " ";
}
您可以在这个场景中使用反射
string[] methodNames = new string{}["ones","twos",....];
for(string method : methodNames)
{
Method method = this.getClass().getMethod(dice_values.getClass());
each_score = method.Invoke(this,dice_values);
total_score += each_score;
end_scores += String.valueOf(each_score) + " ";
}
one()、twos()等方法的用途是什么?如果它们有类似的用途,你可以创建一个带有参数1、2等的泛型函数。我可以将前6个方法组合起来,但还有其他方法(4种,短直法、长直法、全屋法等)我不知道,我真的很喜欢这个解决方案,但不幸的是我是从一个类中构建的……但这很有趣,我想我会转换它,这样我的方法就不会是静态的。更新:使用这个方法,我在getMethod中遇到一个错误:方法getMethod(String,class…)在类型中,类不适用于参数(类)…..但是,在getMethod中添加名称以匹配示例可以消除错误…将继续处理它
int [] scores = new int[] {
ones(dice_values), twos(dice_values), threes(dice_values),
fours(dice_values), fives(dice_values), sixes(dice_values),
sevens(dice_values), eights(dice_values), nines(dice_values),
tens(dice_values), elevens(dice_values), twelves(dice_values),
thirteens(dice_values)
};
for (int each_score : scores) {
total_score += each_score;
end_scores += String.valueOf(each_score) + " ";
}
string[] methodNames = new string{}["ones","twos",....];
for(string method : methodNames)
{
Method method = this.getClass().getMethod(dice_values.getClass());
each_score = method.Invoke(this,dice_values);
total_score += each_score;
end_scores += String.valueOf(each_score) + " ";
}