从列表中获得最长连胜

时间:2015-12-06 05:22:13

标签: java list

在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)

并将返回条纹的长度和条纹的颜色。我不知道去哪里或从哪里开始,所以任何帮助都会受到赞赏。

提前致谢!

1 个答案:

答案 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字段,一个用于颜色和一个条纹的长度。然后,从ColorStreaklongestStreak创建一个新的longestStreakColor并返回它(因为函数只能返回一个值)。