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

水壶问题 java.lang.OutOfMemoryError: Java 堆空间

水壶问题 java.lang.OutOfMemoryError: Java 堆空间

缥缈止盈 2022-03-10 16:08:56
为我的 AI 类编写一段代码,旨在列出给定三个水壶问题的所有可能状态(您可以装满任何水壶,或将尽可能多的水倒入另一个水壶,或清空任何水壶,如您可以按任意顺序多次)从空罐子开始。由于某种原因,在记录了 88 个看似不同的状态后,第 89 个与第一个相同,我最终用完了空间,因为它循环了。我认为这与我如何检查状态是否不同有关,但无法弄清楚。任何帮助将不胜感激。import java.util.ArrayList;    import java.util.List;public class AI {    private static final int[] start=new int[]{0,0,0};    private static int[] jugs;    public static void main(String[] args){        jugs=new int[]{Integer.parseInt(args[0]), Integer.parseInt(args[1]),Integer.parseInt(args[2])};    String out="";    out=out.concat("{");    for (int[] state:addStates(start,new ArrayList<>())) {        out=out.concat("{"+state[0]+","+state[1]+","+state[2]+"}");    }    out=out.substring(0,out.length()-2).concat("}");    System.out.println(out);}private static List<int[]> addStates(int[] start, List<int[]> states) {    states.add(start);    int[][] newStates={            fillA(start),            fillB(start),            fillC(start),            emptyA(start),            emptyB(start),            emptyC(start),            pour(start,0,1),            pour(start,0,2),            pour(start,1,0),            pour(start,1,2),            pour(start,2,0),            pour(start,2,1)    };    for (int[] child:newStates) {        if (!has(states,child)) {            states.addAll(addStates(child,states));        }    }    System.out.println("close");    return states;}private static boolean has(List<int[]> list, int[] e) { //finds out if list contains something with the same values as e    for (int[] el:list) {        boolean is=true;        for(int i=0;i<e.length;i++){            if (el[i]!=e[i]){                is=false;            }        }        if(is){            return true;        }    }    return false;}
查看完整描述

1 回答

?
aluckdog

TA贡献1847条经验 获得超7个赞

问题是我同时使用了states.add(start)and states.addAll(addStates(child,states)),这意味着我多次添加了每个元素。修复此问题后,代码运行良好。


查看完整回答
反对 回复 2022-03-10
  • 1 回答
  • 0 关注
  • 280 浏览

添加回答

举报

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