Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.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 如何在没有for循环的情况下在二维阵列中移动?_Java_Arrays_For Loop_Multidimensional Array_Nested Loops - Fatal编程技术网

Java 如何在没有for循环的情况下在二维阵列中移动?

Java 如何在没有for循环的情况下在二维阵列中移动?,java,arrays,for-loop,multidimensional-array,nested-loops,Java,Arrays,For Loop,Multidimensional Array,Nested Loops,我试图建立一个寻宝游戏使用测试文件,我已经给了。这些文本文件是chars、W、E、N和T,它们都对应于方向,但T是宝藏。在移动行/列的长度之前,一切正常。我怀疑这和for循环有关,但我不确定有没有一种方法可以在不使用for循环的情况下实现这一点,或者有没有人有什么建议可以让它回到正轨? 以下是我迄今为止更新的代码: import java.util.*; 公共类NewGridGame{ 公共静态最终整数衰减=-1; 公共静态final int GOING_IN_CIRCLES=-2; 私人int

我试图建立一个寻宝游戏使用测试文件,我已经给了。这些文本文件是chars、W、E、N和T,它们都对应于方向,但T是宝藏。在移动行/列的长度之前,一切正常。我怀疑这和for循环有关,但我不确定有没有一种方法可以在不使用for循环的情况下实现这一点,或者有没有人有什么建议可以让它回到正轨?

以下是我迄今为止更新的代码:

import java.util.*;
公共类NewGridGame{
公共静态最终整数衰减=-1;
公共静态final int GOING_IN_CIRCLES=-2;
私人int row;
私人国际学院;
私有char[][]游戏板;
NewGridGame(int conRow、int conCol、char[][]conGameBoard){
row=conRow;
col=conCol;
gameBoard=新字符[行][列];
对于(int i=0;i=0){
我--;
转向++;
系统输出打印项次(圈数);
System.out.println(gameBoard[i][j]);
}否则{
返回下降;
}
}else if(游戏板[i][j]='S'){
如果(i+1<行){
i++;
转向++;
系统输出打印项次(圈数);
System.out.println(gameBoard[i][j]);
}否则{
返回下降;
}
}else if(游戏板[i][j]=“E”){
如果(j+1=0){
j--;
转向++;
系统输出打印项次(圈数);
System.out.println(gameBoard[i][j]);
}否则{
返回下降;
}
}else if(游戏板[i][j]=“T”){
回程转弯;
}
}
}
}
下面是一个测试文件的示例

ES
TW

这一个应该返回3,这是移动的次数(在我的代码中是圈数),但是它得到W(需要2次移动),并返回-2,这仅适用于它多次移动到某个位置的情况。此外,并非所有阵列都是正方形,例如有些阵列是1x200或4x5。

如果您知道电路板是这样的,从(0,0)开始,您就不会卡在回路中或离开电路板,您可以使用类似的方法:

public int playGame()
{
  int numMoves = 0; 
  int currentRow = 0;
  int currentCol = 0;

  while(gameBoard[currentRow][currentCol] != 'T')
  {
    switch (gameBoard[currentRow][currentCol])
    {
    case 'E': currentCol++; break;
    case 'W': currentCol--; break;
    case 'S': currentRow--; break;
    case 'N': currentRow++; break;
    default:
       throw new IllegalStateException("Unrecognized Move");
    }
    numMoves++;             
  }

  return numMoves;
}
您可能希望使用
if-then-else
而不是
开关


如果您需要检查循环或板外移动,您应该能够添加这些检查。

看看如何正确地使用循环来检查是否会更好?我想您是对的,因为您建议确实有一种方法:)您好!我对if-then-else语句进行了编辑,只循环了一段时间,因为我对它们比较熟悉。。然而,我仍然没有得到一个返回声明,即我应该为我的初始问题中包含的测试文件返回。在第二次移动之后,它仍然在捕捉,就好像它去过之前没有去过的地方一样。。你知道为什么吗?我在你的原始代码中看到你在更新板上的值。你真的不需要这样做——只需更改当前位置的(行、列)。此外,您是否真的需要跟踪您去过的地方,或者是否有保证董事会将始终在T终止?是否要使用当前代码更新问题?已更新。不能保证它们总是在T处结束,因为如果游戏“从棋盘上掉下来”或到达之前已经到达的位置,游戏将结束/返回,即尝试在一行中向北移动位置0或移动E,然后紧接着移动W。谢谢你的帮助!我发现了问题。我的测试文件有一个愚蠢的问题,它没有调用正确的类。以上代码有效:)谢谢你的帮助!