如何使用递归搜索二维数组中的元素

时间:2014-03-16 08:42:50

标签: java arrays recursion

我有一个2d char数组,我正在尝试使用递归找到一个特定的字符。

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 个答案:

答案 0 :(得分: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]); 
        }
    }
}

答案 1 :(得分:0)

您的方法始终使用相同的值调用自身。

recursion(row,col,c);

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

例如:

recursion(row,++col,c);

答案 2 :(得分: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+1,c);
    }
    else
         recursion(row+1, 0, c)
                //System.out.print(arry[0][1]);

}

}

答案 3 :(得分:0)

在2D阵列中搜索值的最简单方法是从(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
    }
}