Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.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_Multidimensional Array_Null_Nodes_Wordsearch - Fatal编程技术网

Java 将数据重新插入二维数组时出现的问题

Java 将数据重新插入二维数组时出现的问题,java,multidimensional-array,null,nodes,wordsearch,Java,Multidimensional Array,Null,Nodes,Wordsearch,我必须为一个类似Boggle的游戏编写一个程序,我现在让它检查当前一个下面的每个字母,看它们是否组成一个单词。对于这样的董事会: W O Y R F U M F H T R V I G S W 它能找到的唯一一个词是从上到下的“OUT”。当它找到一个单词的一部分时,它会将该字母放入一个字符串中,并将其设置为null,这样它就不会在同一个单词中使用两次字母(完整的算法必须能够在多个方向上搜索)。我使用一个堆栈来跟踪我使用过的字母的坐标,这样我就可以回溯,每次我弹出堆栈时,我都会取出字符串的最后一

我必须为一个类似Boggle的游戏编写一个程序,我现在让它检查当前一个下面的每个字母,看它们是否组成一个单词。对于这样的董事会:

W O Y R
F U M F
H T R V
I G S W
它能找到的唯一一个词是从上到下的“OUT”。当它找到一个单词的一部分时,它会将该字母放入一个字符串中,并将其设置为null,这样它就不会在同一个单词中使用两次字母(完整的算法必须能够在多个方向上搜索)。我使用一个堆栈来跟踪我使用过的字母的坐标,这样我就可以回溯,每次我弹出堆栈时,我都会取出字符串的最后一个字母,并将其放回电路板的原始位置。但问题是,如果删除多个字母,它会将它们全部放在同一个索引中,覆盖上一个。因此,在“OUT”的情况下,在替换了三个字母后,电路板最终会变成这样:

W null Y R
F null M F
H  O   R V
I  G   S W
我已经检查了我的代码,并试图重写它两次,但它总是这样做。你知道为什么会发生这种情况吗

private void checkNeighbors(LetterCoor center){
    String check = out;
    while (!path.empty()){
        if(center.getDirec()==0){//If the direction to check is down
            System.out.println("Bottom");
            if((center.getRow())+1<sideLength && board[(center.getRow())+1][center.getCol()]!=null){//makes sure the space below is !null and !out of bounds
                check+=board[center.getRow()+1][center.getCol()];
                System.out.println("Checking " + check);
                if(isValidWord(check)){//checks if string is part of the lexicon
                    center.nextNeighbor();
                    board[center.getRow()+1][center.getCol()]=null;
                    center = new LetterCoor(center.getRow()+1, center.getCol(), 0);
                    System.out.println("push " + check.substring(check.length()-1));
                    path.push(center);
                    out=check;

                }
                else{
                    center=(LetterCoor) path.pop();
                    center.nextNeighbor();
                    path.push(center);
                }
            }//end of null if
            else{
                System.out.println("Null or end of board");
                center=(LetterCoor) path.pop();
                center.nextNeighbor();
                path.push(center);
            }
        }//end of direc 0 if
        else{
            System.out.println("pop " + out.substring(out.length()-1,out.length()));
            center=(LetterCoor) path.pop();
            center.nextNeighbor();
            board[center.getRow()][center.getCol()]=out.substring(out.length()-1,out.length());
            out=out.substring(0,out.length()-1);
            if (center.getDirec()<1){
                path.push(center);
            }
        }
        System.out.println("Current string is " + out);
    }//end of while loop
}
private void checkneights(莱特库尔中心){
字符串check=out;
而(!path.empty()){
如果(center.getDirec()==0){//如果要检查的方向是向下的
System.out.println(“底部”);

if((center.getRow())+1我最终自己找到了解决方案。问题在于我的LetterCoor对象。Eclipse要求将变量设置为静态,因为我在一个单独的文件中有对象类,所以当我更新一个LetterCoor对象中的坐标数据时,它会将每个LetterCoor对象的数据设置为该坐标。我通过移动对象类放入与该类相同的文件中,并从变量中删除静态声明。

您能使您的帖子更具可读性吗?如果您遇到任何错误,请将其张贴出来plz@KickButtowski我所能做的就是加入一些注释,以澄清或深入解释这段代码是如何运行的。没有产生实际的错误,它只是给出了一个不恰当的解释r output.所以你的逻辑错误看起来是合乎逻辑的,但我根本找不到错误,我的同事也找不到。代码应该扫描电路板,只要只有一个字母需要替换,就正确地替换它。如果有多个字母,它会将所有的字母放在同一个位置,但之后会继续按应该的方式扫描考虑用枚举替换方向:
enum direction{UP(-1,0)、DOWN(1,0)、LEFT(0,-1)、RIGHT(0,1)、UP_LEFT(-1,-1)、UP_RIGHT(-1,1)、DOWN_RIGHT(1,1)、DOWN_LEFT(1,-1)};
,其中数字表示移动到下一个单元格的增量(例如
DOWN_RIGHT
是1 DOWN,1到右侧)。