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