我累了。这一定很简单。木头... ......树木......
我正在尝试返回2D数组中特定值的位置。
我有一个双数组[300] [300]。
除了255之外,其中包含的所有值均为0。
如何编写一个返回[i] [j]位置255的方法?
提前致谢。
答案 0 :(得分:3)
简单地遍历所有元素,直到找到255
:
for ( int i = 0; i < 300; ++i ) {
for ( int j = 0; j < 300; ++j ) {
if ( array[i][j] == 255 ) {
// Found the correct i,j - print them or return them or whatever
}
}
}
答案 1 :(得分:2)
这有效:
public int[] get255() {
for(int i = 0; i < array.length; i++)
for(int j = 0; j < (array[i].length/2)+1; j++)
if(array[i][j] == 255)
return new int[] {i,j};
else if(array[j][i] == 255) //This just slightly increases efficiency
return new int[] {j,i};
return null; //If not found, return null
}
但这可能是最快的。它检查从每个角落开始,逐步向内向中心,水平首先,然后垂直:
public int[] get255() {
for(int i = 0; i < (array.length/2)+1; i++)
for(int j = 0; j < (array[i].length/2)+1; j++)
// Check the top-left
if(array[i][j] == 255)
return new int[] {i,j};
// Check the bottom-left
else if(array[array.length-i][j] == 255)
return new int[] {array.length-i,j};
// Check the top-right
else if(array[i][array[i].length-j] == 255)
return new int[] {i,array[i].length-j};
// Check the bottom-right
else if(array[array.length-i][array[i].length-j])
return new int[] {array.length-i, array[i].length-j};
return null; //If not found, return null
}
答案 2 :(得分:0)
您可以对每列使用二进制搜索。
使用 for 循环迭代每列,因为它是一个二维数组。
从正在迭代的特定列中获取所有行(这将是另一个数组)后,对它们进行二进制搜索。
条件适用: 1.如果数组已排序。 2.如果您确定每列中只有一个元素。 (没有重复)。 3.如果行中有重复项(执行线性搜索)。
我希望它有所帮助。如果仍有疑问,请随时询问:)
答案 3 :(得分:0)
对于任何大小的Array,您都将大小放在首位,尽管我使用扫描仪直接输入值,但是您也可以从其他方法中获取它,我正在学习,因此,如果我输入错误,请更正我。在您的案例中,值将为255,而不是1。
public class MagicSquareOwn {
public static int[] findValueByElement(int n) {
Scanner input = new Scanner(System.in);
int[][] squareMatrix = new int[n][n];
int[] position = null;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
squareMatrix[i][j] = input.nextInt();
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (squareMatrix[i][j] == 1) {
position= new int[] { i, j };
System.out.println("position is:" + Arrays.toString(position));
}
}
}
return position;
}
public static void main(String[] args) {
Scanner inputOfMatrixNo = new Scanner(System.in);
int n = inputOfMatrixNo.nextInt();
MagicSquareOwn.findValueByElement(n);
}
}