[英]Java - How to find an element in a 2D Array using recursion
這是問題所在:給定一個名為data
的2D int
Array,如果Array中的任何值等於給定元素,則返回true
。 否則返回false
。 您的程序應在任一維度上使用任意大小的數組,包括參差不齊的(或不規則的)數組。 例如:
int[][] table = new int[][] { {5, 2, 8, 5, 61}, {3, 9, 6}, {10, 42, 53, 45}};
searchTable(table, 45) returns true
searchTable(table, 100) returns false
注意事項:
不能使用任何類型的循環,方法不能是靜態的,不能使用類實例變量。
到目前為止,這是我的代碼:
public boolean searchTable(int[][] data, int element){
boolean result = false;
int a = searchRow(data[data.length-1], data.length -1);
int b = searchCol(data[a], data.length -1);
if (data[a][b] == element)
result = true;
else
result = false;
return result;
}
public int searchRow(int [] row, int index)
{
if (row.length != 0)
return index;
else
{
return searchRow(row, index + 1);
}
}
public int searchCol(int [] col, int index)
{
if (col.length != 0 )
return index;
else
{
return searchCol(col, index + 1);
}
}
我的輸出對所有情況都是false
的。
這是一種遞歸解決問題的方法,
public boolean searchTable(int[][] data, int element) {
return searchTable(data, element, 0);
}
private boolean searchTable(int[][] data, int element, int p) {
if (p < 0 || p > data.length) {
return false;
}
int[] row = getRow(data, p);
if (searchRow(row, element, 0)) {
return true;
}
return searchTable(data, element, 1 + p);
}
private boolean searchRow(int[] data, int element, int p) {
if (data == null || p >= data.length) {
return false;
}
if (data[p] == element) {
return true;
}
return searchRow(data, element, 1 + p);
}
public int[] getRow(int[][] in, int x) {
if (in == null || x >= in.length) {
return null;
}
return in[x];
}
public static void main(String[] args) {
// I named the class Question.
Question question = new Question();
int[][] table = new int[][] { { 5, 2, 8, 5, 61 }, { 3, 9, 6 },
{ 10, 42, 53, 45 } };
System.out.println(question.searchTable(table, 45));
System.out.println(question.searchTable(table, 100));
}
輸出是
true
false
一種將返回結果的方法:
public class RecursiveSearch{
int rowCount = 0;
int columnCount = 0;
boolean result = false;
public boolean searchTable(int[][] data, int element){
if(data[rowCount].length==columnCount)
{
rowCount++;
columnCount=0;
}
if(data.length > rowCount)
{
if(data[rowCount][columnCount] == element)
{
result = true;
}
else
{
columnCount++;
searchTable(data, element);
}
}
return result;
}
public static void main(String[] args) {
int[][] table = new int[][] { {5, 2, 8, 5, 61}, {3, 9, 6}, {10, 42, 53, 45}};
System.out.println(new RecursiveSearch().searchTable(table, 45));
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.