我有一个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();
}
}
但是这给了我一个堆栈溢出。如何使用递归在二维数组中找到元素。
答案 0 :(得分:1)
看起来你的if语句没有正确执行。您正在检查if c == " "
,但我认为您的意思是检查if array[row][col]==c
。此外,您似乎永远不会实际增加row
和col
的值,因此递归会不断发生。由于递归值永远不会改变,并且检查永远不会成立,这最终会导致堆栈溢出。
尝试以下几点:
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
}
}