为了账号安全,请及时绑定邮箱和手机立即绑定

包含总是返回false

包含总是返回false

慕雪6442864 2021-04-11 16:14:07
我正在写国际象棋游戏,但在检查移动是否有效时遇到了麻烦。长话短说,我有Pawn(扩展片断)类,该类具有 //First element of array represents row, second element of array represents column Set<int[]> legalMoves = new HashSet<>(); void initLegalMoves() {    if(color == PieceColor.WHITE) {        legalMoves.add(new int[] {-1, 0});    } else {        legalMoves.add(new int[] {1, 0});    } }现在,我得到了另一个类MoveValidator,显然,该类检查此举是否有效。    private boolean isLegalMove(int oldRow, int oldColumn, int newRow, int newColumn){        int rowDifference = newRow - oldRow;        int columnDifference = newColumn - oldColumn;        board.getSelectedTile().getPiece().getLegalMoves().forEach(x -> {            if(x[0] == rowDifference && x[1] == columnDifference){                System.out.println("Ok move");            }        });        return board.getSelectedTile().getPiece().getLegalMoves().contains(new int[] {rowDifference, columnDifference});    }尽管它似乎不起作用,但返回值始终为false。其余的代码似乎很重要,forEach当移动确实可以的时候,我会在打印“ Ok move”之前放上。我可能可以用Iterator和实现我想要的for loops,但是为什么contains总是返回false?我需要重写equals()要检查的类吗?不能做到这一点int[],对吗?另一方面,我可以只使用lambda,forEach就像我打印值一样。不过,我不能简单地放在return true里面if statement...
查看完整描述

1 回答

?
PIPIONE

TA贡献1829条经验 获得超9个赞

不要使用Set<int[]>,而是使用,Set<Set<Integer>>因为array没有实现equalshashCode方法,这就是contains为什么它不起作用,这就是它返回的原因false

一种选择是遍历,Set<int[]>然后按Arrays.equals()方法比较每个元素。

或只使用Set<Set>因为Set实现equalshashCode并且您将能够使用contains方法


查看完整回答
反对 回复 2021-04-21
  • 1 回答
  • 0 关注
  • 146 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信