有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何使用递归搜索2d数组中的元素

我有一个2d字符数组,我试图用递归找到一个特定的字符

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();
}

}

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


共 (4) 个答案

  1. # 1 楼答案

    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]);
    
    }
    
    }
    
  2. # 2 楼答案

    您的方法一直在用相同的值调用自己

    recursion(row,col,c);
    

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

    例如:

    recursion(row,++col,c);
    
  3. # 3 楼答案

    在二维数组中搜索值的最简单方法是从(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
        }
    }
    
  4. # 4 楼答案

    看起来你的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]); 
            }
        }
    }