有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java需要帮助减少三重for循环以提高效率

for (int i = 0; i < 3; ++i) {
    for (int k = 0; k < 7; ++k) {
        for (int h = i; h < 4 + i; ++h) {
            result = state.getAt(k, h);
            if (result == 1) {
                ++firstpl;
            }
            if (result == 2) {
                ++secondpl;
            }
            if (firstpl > 0 && secondpl > 0) {
                break;
            }
            //y = k;
        }
        if (firstpl == 0 && secondpl == 0) {
            break;
        } else if (firstpl > secondpl) {
            score += firstpl * firstpl;
            //if(state.getHeightAt(y)-3 < 3) score += 3+firstpl*2;
        } else {
            score -= secondpl * secondpl;
            //if(state.getHeightAt(y)-3 < 3) score -= 3+secondpl*2;
        }

        firstpl = 0;
        secondpl = 0;
    }
}

基本上我有一个7乘6的网格。我将浏览7列,并垂直查看每4个连续的块。因为上面有6个街区。每列有3个4个连续块。状态getAt(k,h)接受x和y并返回一个值


共 (1) 个答案

  1. # 1 楼答案

    我不认为你能在这方面有所改进,除非你能为这个“状态”找到一个替代的表示,它允许这个计算以增量的方式执行

    由于你没有正确地解释国家或计算的实际含义,除了你以外的任何人都很难弄清楚替代方法是否可行。(就我个人而言,我不会试图对代码的含义进行反向工程。)


    嗯。对于Connect4,赢/输是在7x6网格中水平、垂直或对角排列的4个棋盘格。因此,您可以将分数状态表示为一个计数器数组,对应于可以生成获胜线的每一列、每一行和每一条对角线。(7+5+4+4=20个计数器=>;20个计数器)然后构造从(x,y)位置到通过该位置的行索引的静态映射。在点(x,y)添加检查器时,查找计数器并递增它们。当您删除检查器时。。。减量

    我不确定这与你现有的评分功能有什么关系。。。但是我不知道这个功能与赢得比赛的策略有什么关系。无论哪种方式,您都可以使用上述方法以增量方式计算分数