如何检查二维数组是否包含数组?

时间:2019-11-18 19:28:23

标签: java arrays

以2d数组为例

int[][] arr = { {2,3}, {53, 2}, {23,13} };

如何检查它是否包含数组{53, 2}

我有以下代码:

int[][] arr = {{1, 3}, {2, 2}, {2, 5}, {3, 1}, {3, 4}, {3, 7}, {4, 3}, {4, 6}, {5, 2}, {5, 5},
                     {5, 8}, {6, 4}, {6, 7}, {7, 3}, {7, 6}, {7, 9}, {8, 5}, {8, 8}, {9, 7}};
for(int i = 0; i < 11; i++) {
    for(int j = 0; j < 11; j++) {
        //here i want to check if arr contains the array {i, j} 
    }
}

如何简单有效地做到这一点?

4 个答案:

答案 0 :(得分:1)

您应该遍历整个数组,分析值(基于索引)并与给定的元组进行比较。请注意,对于array.length标识的特定行,array[i].length将为您提供整个数组上正确数量的元素,并且i也将执行相同的操作,因此您不需要手动处理(并不时更改)索引和数组大小/长度。

public class Application {
  final static int[][] array = { YOUR_TUPLES_HERE };

  public static boolean contains(final int x, final int y) {
    for (int i = 0; i < array.length; i++) {
      if (array[i][0] == x) { // ...or just && array[i][array[i].length - 1] == y
        for (int j = array[i].length - 1; 0 < j; j--) {
          if (array[i][j] == y) {
            return true;
          }
        }
      }
    }
    return false;
  }

  public static void main(final String... args) {
    System.out.printf("==> %s%n", contains(3, 1)); // true
    System.out.printf("==> %s%n", contains(6, 5)); // false
    System.out.printf("==> %s%n", contains(9, 9)); // false
  }
}
  

如果您确定数组在第二维上的元素数量不能超过两个,则可以仅使用1而不是array[i].length

或者,您可以将{ 1, 3 }建模为Point(x, y),这将使您的生活更轻松,除非这是您不自由的班级作业(或某种锻炼)之一建模的东西。

答案 1 :(得分:1)

如果您的Java版本和您的组织允许,则可以使用流管道:

    int[][] arr = {{1, 3}, {2, 2}, {2, 5}, {3, 1}, {3, 4}, {3, 7}, {4, 3}, {4, 6}, {5, 2}, {5, 5},
            {5, 8}, {6, 4}, {6, 7}, {7, 3}, {7, 6}, {7, 9}, {8, 5}, {8, 8}, {9, 7}};
    int[] lineToSearchFor = { 8, 5 };
    boolean arrayContainsLine = Arrays.stream(arr)
            .anyMatch(line -> Arrays.equals(line, lineToSearchFor));
    System.out.println(arrayContainsLine);

此代码段的输出为:

  

true

流可以在Java 8和更高版本中使用。

答案 2 :(得分:-1)

这是一个代码示例。可能不是最好的,但它正在起作用。

int[][] arr = {{1, 3}, {2, 2}, {2, 5}, {3, 1}, {3, 4}, {3, 7}, {4, 3}, {4, 6}, {5, 2}, {5, 5},
    {5, 8}, {6, 4}, {6, 7}, {7, 3}, {7, 6}, {7, 9}, {8, 5}, {8, 8}, {9, 7}};

    int[] search = new int[]{7, 3};
    boolean exist = false;
    for (int i = 0; i < arr.length; i++) {
        int j = 0;
        for (; j < arr[0].length; j++) {
            if (arr[i][j] != search[j]) {
                break;
            }
        }
        if (j == arr[0].length && arr[i][j-1] == search[j-1]) {
            exist = true;
            break;
        }
    }
    System.out.println(exist);

输出:

true

答案 3 :(得分:-2)

在这种情况下,我倾向于使用Arrays.deepToString

    String arrAsString = Arrays.deepToString(arr);
    if(arrAsString.contains("[53, 2]"))
    {
        System.out.println("contains line");
    }
相关问题