Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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_Loops - Fatal编程技术网

Java 在没有任何方法的二维字符数组中搜索字符串

Java 在没有任何方法的二维字符数组中搜索字符串,java,arrays,loops,Java,Arrays,Loops,我的工作是为其他学生测试练习。今天我遇到了一个非常困难的问题(至少对我来说),我不确定我现在是否只是个笨蛋 我得到了一个2D字符数组和3个字符串,我必须在其中找到它们。单词可以跨越水平、垂直和对角线;向前或向后。问题是:我不允许使用任何方法,所有内容都必须在主方法内 我找不到一种没有像

我的工作是为其他学生测试练习。今天我遇到了一个非常困难的问题(至少对我来说),我不确定我现在是否只是个笨蛋

我得到了一个2D字符数组和3个字符串,我必须在其中找到它们。单词可以跨越水平、垂直和对角线;向前或向后。问题是:我不允许使用任何方法,所有内容都必须在主方法内


我找不到一种没有像<10个循环的方法。你有什么好主意吗?

我的意思是,这是显而易见的方式,当然

使用或类似的方法可以稍微加快比较速度

for row in haystack:
  for character in row:
    #check if pattern or reversed pattern matches
for column in haystack:
  for character in column:
    #check if pattern or reversed pattern matches
for positively-sloped-diagonal in haystack:
  for character in diagonal:
    #check
for negatively-sloped-diagonal in haystack:
  for character in diagonal:
    #check
根据具体的参数,执行以下操作可能会少一些脑死:

for each pattern:
  for each slot in the array:
    for horizontal in [-1, 0, 1]:
      for vertical in [-1, 0, 1]:
        if horizontal == vertical == 0:
          pass
        for n in range(pattern.length):
          if pattern[n] != haystack[row + n * vertical][column + n * horizontal]
            break
        #Pattern found
  #Pattern not found

您可以递归调用main方法来向前、向后、向上、向下、左上/向下对角线和右上/向下对角线进行搜索

if (arg[2] == array.length && arg[3] == array.length) 
    return 0; 

if (firstTimeMainFunctionCalled) {
    for (int i = 0; i < array.length; i++) {
        for (int j = 0; j < array[0].length; j++) {

            // Only make recursive call when you are 
            // on the outer edge of the 2D array 
            if (i == 0 || j == 0) {
                main(1, 0, i, j);
                main(0, 1, i, j);
                main(1, 1, i, j);
                main(-1, 0, i, j);
                main(0, -1, i, j);
                main(-1, -1, i, j);
                main(1, -1, i, j);
                main(-1, 1, i, j);
        }
    }
}

int rowInc = arg[0];
int colInc = arg[1];
int curRow = arg[2];
int curCol = arg[3];
int str1Place = 0;
int str2Place = 0;
int str3Place = 0;

while (curRow >= 0 && curCol >= 0 && curRow < array.length && curCol < array[0].length) {
    if (array[curRow][curCol] == str1[str1Place]) 
        str1Place++;
    else 
        str1Place = 0;

    if (str1Place == str1.length) 
         // Found str1 

    // Do the same for str2 and str3 

    curRow += rowInc;
    curCol += colInc; 
}
if(arg[2]==array.length&&arg[3]==array.length)
返回0;
如果(调用firstTimeMainFunctionCalled){
for(int i=0;i=0&&curCol>=0&&curRow
这是一个非常粗糙的解决方案,可以做很多改进。显然,您必须通过将参数转换为字符串列表来适当地调用main方法,但它应该给您一个开始的地方。您可以使用动态编程来改进这一点,您还可以在找到字符串后回溯以对其进行处理。此外,当您查看嵌套循环不需要嵌套


请原谅我的伪代码:)

不是每个要查找的字符串都有3个字符长吗?不,它们是可变的。这是向后的。我们应该教学生将单个代码块分解为方法。你的意思是说你有一个2D字符数组,你需要查找3个字符串(英语词典单词)在2D数组中,你有3个单词需要你去搜索?类似的问题在C++中实现。谢谢,不知道这个!