在2D数组中返回值的位置,Java

时间:2011-12-06 23:19:48

标签: java arrays indexing 2d return

我累了。这一定很简单。木头... ......树木......

我正在尝试返回2D数组中特定值的位置。

我有一个双数组[300] [300]。

除了255之外,其中包含的所有值均为0。

如何编写一个返回[i] [j]位置255的方法?

提前致谢。

4 个答案:

答案 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);

    }

}