簡體   English   中英

Java-如何使用遞歸在2D數組中查找元素

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM