【问题标题】:how to search elements in a 2d array using recursion如何使用递归搜索二维数组中的元素
【发布时间】:2014-03-16 08:42:49
【问题描述】:

我有一个二维字符数组,我正在尝试使用递归查找特定字符。

public class Test {

char arry [][] = {{'1',' ','B'},
                  {'C','K','M'},
                  {'H','R','P'}
};

public Test(){
    recursion(0,0,arry[0][0]);

}
private void recursion(int row, int col, char c) {
    if(c==' '){
        System.out.print("Location: " + row + " " + col );
    }else
    {
        if(col+1<arry[0].length){
            recursion(row,col,c);
        }
                    //System.out.print(arry[0][1]);

    }

}
public static void main(String[] args) {

    new Test();
}

}

但这给了我一个堆栈溢出。如何使用递归找到二维数组中的元素。

【问题讨论】:

  • 您的方法使用完全相同的参数值调用自己。

标签: java arrays recursion


【解决方案1】:

您的 if 语句似乎没有正确执行。您正在检查以检查if c == " ",尽管我认为您的意思是检查if array[row][col]==c。此外,您似乎从未真正增加rowcol 的值,因此递归不断地在其自身上发生。由于递归值永远不会改变,并且检查永远不会为真,这最终会导致堆栈溢出。

尝试以下方法:

private void recursion(int row, int col, char c) {
    if(array[row][col]==c){
        System.out.print("Location: " + row + " " + col );
    } else {
        if(col+1<array[0].length){
            recursion(row,col+1,c);
        } else if(row + 1<array[1].length){
            recursion(row+1,0,c);
        } else {
            System.out.print("Does not exist");
            //System.out.print(arry[0][1]); 
        }
    }
}

【讨论】:

    【解决方案2】:

    你的方法总是用相同的值调用自己。

    recursion(row,col,c);
    

    更新您的值,然后再次将其发送到该方法。所以它可以在你的数组中寻找另一个元素

    例如:

    recursion(row,++col,c);
    

    【讨论】:

      【解决方案3】:
      private void recursion(int row, int col, char c) {
      if(c==' '){
          System.out.print("Location: " + row + " " + col );
      }else
      {
          if(col+1<arry[0].length){
              recursion(row,col+1,c);
          }
          else
               recursion(row+1, 0, c)
                      //System.out.print(arry[0][1]);
      
      }
      
      }
      

      【讨论】:

        【解决方案4】:

        在二维数组中搜索值的最简单方法是从 (0, 0) 开始并扫描整个列,然后再前进到下一行。当某个值与您要查找的内容匹配时,返回该位置。

        这是一个例子。

        import java.util.Arrays;
        
        public class Find2D {
            public static int[] search(char[][] arr, char ch, int row, int col) {
                if (arr[row][col] == ch) {
                    return new int[] { row, col };
                } else {
                    if (col + 1 < arr[0].length) {
                        return search(arr, ch, row, col + 1);
                    } else if (row + 1 < arr[1].length) {
                        return search(arr, ch, row + 1, 0);
                    }
                }
                return null;
            }
        
            public static int[] search(char[][] arr, char ch) {
                return search(arr, ch, 0, 0);
            }
        
            public static void printr(int[] result) {
                System.out.println("Location: " + Arrays.toString(result));
            }
        
            public static void main(String[] args) {
                char arr[][] = {
                    { '1', ' ', 'B' },
                    { 'C', 'K', 'M' },
                    { 'H', 'R', 'P' }
                };
        
                printr(search(arr, arr[0][0])); // [0, 0]
                printr(search(arr, 'M'));       // [1, 2]
                printr(search(arr, 'x'));       // null
            }
        }
        

        【讨论】:

          猜你喜欢
          • 2021-01-18
          • 2018-06-24
          • 1970-01-01
          • 1970-01-01
          • 2014-08-07
          • 1970-01-01
          • 1970-01-01
          • 2014-05-05
          • 2021-05-10
          相关资源
          最近更新 更多