以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}
}
}
如何简单有效地做到这一点?
答案 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");
}