Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 每次通过循环运行不同的方法_Java_Loops_Switch Statement_Case - Fatal编程技术网

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