【问题标题】:Java matrix contains ArrayList elementsJava 矩阵包含 ArrayList 元素
【发布时间】:2016-03-22 15:20:14
【问题描述】:

我正在编写一个井字游戏,我有 1 个ArrayList<String> OFields(它包含 O 拥有的字段,如 TOP_LEFT、CENTRE_RIGHT 等)和一个

String[][] winComb={{"TOP_LEFT","TOP_CENTRE","TOP_RIGHT"}, {"CENTRE_LEFT","CENTRE_CENTRE","CENTRE_RIGHT"},
                    {"BOT_LEFT","BOT_CENTRE","BOT_RIGHT"}, {"TOP_LEFT","CENTRE_LEFT","BOT_LEFT"}, 
                    {"TOP_CENTRE","CENTRE_CENTRE","BOT_CENTRE"}, {"TOP_RIGHT","CENTRE_RIGHT","BOT_RIGHT"},
                    {"TOP_LEFT","CENTRE_CENTRE","BOT_RIGHT"}, {"TOP_RIGHT","CENTRE_CENTRE","BOT_LEFT"}};

我想检查一下,OFields 的元素是否包含 winComb[1..8]

if(OFields.contains((winComb[0][0])) && OFields.contains(winComb[0][1]) && OFields.contains(winComb[0][2])){
                                        System.out.println("win");
                                    }

这就是我所拥有的,它适用于第一个 winComb 元素,但如果我这样写会很混乱。如何检查所有 OFields 元素是否在 winComb 矩阵中?

【问题讨论】:

  • 嗯,使用字符串和字符串数组来模拟 tictactoe 板......似乎不是最理想的。我建议宁愿花一些时间想出一个更好的“模型”;与花时间使用这个模型并让它做你想做的事情相比。
  • 它们只是容器,我使用的是 swing,但我必须存储使用过的字段

标签: java matrix arraylist


【解决方案1】:

你可以使用List#containsAll():

static boolean win(List<String> oFields) {
    for (String[] positions : WIN_COMB) {
        if (oFields.containsAll(Arrays.asList(positions)))
            return true;
    }
    return false;
}

但真诚地说,我同意@Jägermeister,你应该为此选择更合适的类模型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多