Java 将数据重新插入二维数组时出现的问题
我必须为一个类似Boggle的游戏编写一个程序,我现在让它检查当前一个下面的每个字母,看它们是否组成一个单词。对于这样的董事会: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,这样它就不会在同一个单词中使用两次字母(完整的算法必须能够在多个方向上搜索)。我使用一个堆栈来跟踪我使用过的字母的坐标,这样我就可以回溯,每次我弹出堆栈时,我都会取出字符串的最后一
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到右侧)。