在Java中,我正在编写代码来分析另一个程序输出中最长的颜色条纹。该程序可以输出三种颜色:红色,绿色和黑色。绿色计数为正在检查的颜色(例如RRGR =红色x4)。我正在使用的当前代码是:
private static boolean isStreak(int color, int... lst){
for(int i:lst){
if(i!=color){//Whichever color is being checked
if(i!=-12280508)//Green counts as whichever color is being checked
return false;
}
}
return true;
}
虽然这段代码有效,但我需要几个if / else块来有效地捕获1-7中的所有条纹,例如:
if(isStreak(Color.RED.value,last[lSize-1],last[lSize-2],last[lSize-3],last[lSize-4],last[lSize-5],last[lSize-6],last[lSize-7])){
if(!lb.was7){
log("red 7x");
doBet(bet*64);
betBlack();
lb.was7=true;
}
}else if(isStreak(Color.BLACK.value,last[lSize-1],last[lSize-2],last[lSize-3],last[lSize-4],last[lSize-5],last[lSize-6],last[lSize-7])){
if(!lb.was7){
log("red 7x");
doBet(bet*64);
betRed();
lb.was7=true;
}
}else if(isStreak(Color.RED.value,last[lSize-1],last[lSize-2],last[lSize-3],last[lSize-4],last[lSize-5],last[lSize-6])){
log("red 6x");
doBet(bet*32);
betBlack();
}else if(isStreak(Color.BLACK.value,last[lSize-1],last[lSize-2],last[lSize-3],last[lSize-4],last[lSize-5],last[lSize-6])){
log("black 6x");
doBet(bet*32);
betRed();
}
等等。我想知道是否有办法编写一些代码来获取列表的参数,如:
getStreak(int[] list)
并将返回条纹的长度和条纹的颜色。我不知道去哪里或从哪里开始,所以任何帮助都会受到赞赏。
提前致谢!
答案 0 :(得分:1)
一般的想法是存储您所在的当前条纹的颜色以及该条纹的长度。循环遍历列表中的颜色,对于每个颜色,如果它与当前条纹的颜色相同或为绿色,则递增当前条纹计数器。一旦条纹结束,检查它是否长于最长的前一条纹(您必须跟踪它)。如果是这样,请更新最长的条纹及其颜色,重置当前条纹,然后继续寻找更长的条纹。
以下是您可以使用getStreak(int[] colors)
方法完成此操作的一些代码:
if (colors != null && colors.length > 0) {
// Default streaks to 1, and colors to the first color
int longestStreak = 1;
int longestStreakColor = colors[0];
int currStreak = 1;
int currStreakColor = colors[0];
// Start at index 1 since we already stored the first color in currStreakColor
for (int i = 1; i < colors.length; i++) {
// If the color is the same as the previous color or is green,
// increment the currStreak
if (colors[i] == currStreakColor || colors[i] == Color.GREEN.value) {
currStreak++;
} else {
// If the color is different and the streak that just ended was
// longer than the previous longest streak, update longestStreak
// and longestStreakColor
if (currStreak > longestStreak) {
longestStreak = currStreak;
longestStreakColor = currStreakColor;
}
// Reset currStreak
currStreak = 1;
}
// Set currStreakColor to the current color if it isn't green
if (colors[i] != Color.GREEN.value) {
currStreakColor = colors[i];
}
}
}
// If we ended on a streak longer than the previous longest streak, update
// longestStreak and longestStreakColor
if (currStreak > longestStreak) {
longestStreak = currStreak;
longestStreakColor = currStreakColor;
}
如果您想在方法中使用此代码,要返回颜色和条纹,您可能需要创建一个类,例如ColorStreak
,它有两个int
字段,一个用于颜色和一个条纹的长度。然后,从ColorStreak
和longestStreak
创建一个新的longestStreakColor
并返回它(因为函数只能返回一个值)。