簡體   English   中英

在java中查找二維int數組中int值的位置

[英]Find the position of an int value in a 2D int array in java

我想編寫一個方法,它將返回 2D int 數組中某個值的第一個位置。 如果該值不在數組中,則位置將是一個值為 [-1, -1] 的數組

我的代碼是:

public static int[] findItemIn2DArray(int[][] A, int value) 
{
    int position[] = new int [] {-1, -1} ;
    
    for (int i=0; i < A.length; i++)
    {
        for (int j=0; j < (A[i].length/2)+1; j++)
        {
            if ( A[i][j] == value ) 
            {
                position [0] = i;
                position [1] = j;
            }
            break;
        }
        break;
    }
    
    return position;
}

我給數組

int numbers[][] = 
        
            {
                {2,3,5}         , 
                {4,1,0,10}      ,
                {3,9,10}        ,
                {5,9,10,1,12}
            };

我正在尋找值 10。

它應該返回 [1,3],但我得到 [-1,-1]。 我認為它不會遍歷所有行,而只檢查第一個值。

你能幫助我嗎? 謝謝你。

如果第一次出現的值不等於該值,它會立即中斷循環。 嘗試將 break 語句移到“if”語句中

這是因為你在內部 for 循環之后打破了外部 for 循環

首先,您需要遍歷整個列,而不僅僅是其中的一半(在您的第二個 for 循環中)。

其次,你的第一個break語句應該在 if 語句的內部,因為你現在擁有代碼的方式,你的程序總是會跳出代碼而不會到達所有元素。

第三,你為什么要第二次break 這會導致每次您只通過第一行時您的代碼就會中斷。 你在那里不需要它。

您的代碼應如下所示:

public static int[] findItemIn2DArray(int[][] A, int value) 
{
int position[] = new int [] {-1, -1} ;

boolean found = false;
for (int i=0; i < A.length; i++)
{
    for (int j=0; j < (A[i].length); j++)
    {
        if ( A[i][j] == value ) 
        {
            position [0] = i;
            position [1] = j;
            found = true;
            break;
        }
    }
    if(found)
        break;
}

return position;
}

(A[i].length/2)+1 是一個錯字,它應該是 A[i].length(這就是當你使用 CNTL+C 而不檢查時會發生的情況!)

關於break命令的評論非常有用,謝謝大家!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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