Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中字符串发生了一些奇怪的事情_Java_Arrays_String_Debugging_Linked List - Fatal编程技术网

java中字符串发生了一些奇怪的事情

java中字符串发生了一些奇怪的事情,java,arrays,string,debugging,linked-list,Java,Arrays,String,Debugging,Linked List,在我开始之前,我应该先说我是一名学生,这是一项作业。我需要帮助理解哪里出了问题以及如何修复它,但我不希望代码段告诉我该怎么做 所以,我想解决一个16块的难题。我正在使用迭代深化来找到最佳解决方案,我正在测试nextConfigs方法来找到谜题可以移动到的地方 private static LinkedList<Puzzle> nextConfigs(Puzzle start) { LinkedList<Puzzle> nextPuzzles = new Linke

在我开始之前,我应该先说我是一名学生,这是一项作业。我需要帮助理解哪里出了问题以及如何修复它,但我不希望代码段告诉我该怎么做

所以,我想解决一个16块的难题。我正在使用迭代深化来找到最佳解决方案,我正在测试nextConfigs方法来找到谜题可以移动到的地方

private static LinkedList<Puzzle> nextConfigs(Puzzle start) {
    LinkedList<Puzzle> nextPuzzles = new LinkedList<Puzzle>();
    Puzzle wlast = start; //creates a copy of 'last'(start) for working with to get up
    //System.out.println("Debug 1");
    if(wlast.hasUp()){
        wlast.moveUp();
        nextPuzzles.add(wlast);
        System.out.println("Debug 11 " + wlast.toString());
        wlast = start; //resets working copy
    }
    if(wlast.hasRight()){
        wlast.moveRight();
        nextPuzzles.add(wlast);
        System.out.println("Debug 12 " + wlast.toString());
        wlast = start; //resets working copy
    }
    if(wlast.hasDown()){
        wlast.moveDown();
        nextPuzzles.add(wlast);
        System.out.println("Debug 13 " + wlast.toString());
        wlast = start; //resets working copy
    }
    if(wlast.hasLeft()){
        wlast.moveLeft();
        nextPuzzles.add(wlast);
        System.out.println("Debug 14 " + wlast.toString());
        wlast = start; //resets working copy
    }
    System.out.println("Debug 7: next configs contains: " + nextPuzzles.toString());
    for(Puzzle next: nextPuzzles){
        System.out.println("Debug 7.2 next configs contains " + next.toString());
    }
    return nextPuzzles;
}
Puzzle类包含一个包含Puzzle状态的字符串和一个要编辑的字符数组(由toCharArray方法创建)。hasUp etc通过编辑数组,然后将字符串设置为从数组中创建的新字符串(拼图=新字符串(wpuzzle)),检查在给定方向上移动是否有效,并向上移动etc。我已经没有办法解决这个问题了


如果有人能看到我做错了什么,或者对可能导致这种情况的原因提出建议,我将不胜感激。我已经测试了hasUp等和Moveup等方法,以确保它们能够正常工作。我不太了解,但是
Puzzle wlast=start//创建“最后一次”(开始)的副本,以便使用该副本起床
是错误的。这不会创建副本。它只是使wlast引用与start相同的对象。因此,修改wlast引用的对象也将修改start引用的对象,因为它们实际上构成了一个唯一的对象。您总是在列表中存储相同的唯一对象,并不断对其进行修改。Dud您是否在调试器中逐步完成了代码?(不仅仅是打印材料)。学习如何使用调试器是一项关键技能。我确实在调试器中学习过它,这就是我知道hasUp etc方法如何工作的原因。至于拼图wlast=开始出错…我不知道。谢谢这可能就是我做错的地方。编辑:是的,这就是问题所在。我现在已经修好了,非常感谢你指出这一点。是时候做更多的测试了。我不太懂,但是
Puzzle wlast=start//创建“最后一次”(开始)的副本,以便使用该副本起床
是错误的。这不会创建副本。它只是使wlast引用与start相同的对象。因此,修改wlast引用的对象也将修改start引用的对象,因为它们实际上构成了一个唯一的对象。您总是在列表中存储相同的唯一对象,并不断对其进行修改。Dud您是否在调试器中逐步完成了代码?(不仅仅是打印材料)。学习如何使用调试器是一项关键技能。我确实在调试器中学习过它,这就是我知道hasUp etc方法如何工作的原因。至于拼图wlast=开始出错…我不知道。谢谢这可能就是我做错的地方。编辑:是的,这就是问题所在。我现在已经修好了,非常感谢你指出这一点。是时候做更多的测试了。
Debug 12 a_aabbbbccccdddd
Debug 13 abaab_bbccccdddd
Debug 14 abaa_bbbccccdddd
Debug 7: next configs contains: [abaa_bbbccccdddd, abaa_bbbccccdddd, abaa_bbbccccdddd]
Debug 7.2 next configs contains abaa_bbbccccdddd
Debug 7.2 next configs contains abaa_bbbccccdddd
Debug 7.2 next configs contains abaa_bbbccccdddd