You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

功能相同的两个Java方法,为何switch实现可用而ArrayList遍历实现不可用?

方法2无法正常运行的核心原因

  • 四个if分支的判断条件完全相同,没有和遍历到的方向做对应绑定:无论当前遍历到的是U/R/L/D中的哪一个,只要和入参匹配,就会直接命中第一个if分支,永远返回U对应的Coordinate(0,-1),完全不会触发后面三个对应其他方向的if分支,自然无法返回正确坐标。
  • 例如入参为R时,遍历到列表第二个元素(索引为1)时匹配成功,第一个if判断成立,直接返回U的坐标,不会走到对应R的第二个if分支。

简易修正方案

你可以改用Map存储方向和坐标的映射关系,代码更简洁也不会出现上述匹配错误:

Coordinate processHeadDirectionCoordinate(String directionMoved) {    
    Map<String, Coordinate> directionMap = new HashMap<>();            
    directionMap.put("U", new Coordinate(0,-1));
    directionMap.put("R", new Coordinate(1,0));
    directionMap.put("L", new Coordinate(-1,0));
    directionMap.put("D", new Coordinate(0,1));
    return directionMap.getOrDefault(directionMoved, direction);
}

如果要保留原有遍历写法,可以将方向和坐标按索引对应绑定即可:

Coordinate processHeadDirectionCoordinate(String directionMoved) {    
    ArrayList<String> dirList = new ArrayList<>();            
    dirList.add("U");
    dirList.add("R");
    dirList.add("L");
    dirList.add("D");
    Coordinate[] coordArr = new Coordinate[]{
        new Coordinate(0,-1),
        new Coordinate(1,0),
        new Coordinate(-1,0),
        new Coordinate(0,1)
    };
    for(int i = 0; i < dirList.size(); i++) {
        if(dirList.get(i).equals(directionMoved)) {    
            return coordArr[i];
        }
    }
    return direction;    
}

内容的提问来源于stack exchange,提问作者Stephen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 12:36:03