【发布时间】:2014-02-23 08:55:20
【问题描述】:
我在我学校的计算机科学课上,我被困在这个问题上。甚至真的想不出如何解决它的想法。
这里是逐字逐句:
编写一个名为 contains 的静态方法,它接受两个整数数组 a1 和 a2 作为参数,并返回一个布尔值,指示 a2 的元素序列是否出现在 a1 中(true 表示是,false 表示否)。 a2 中的元素序列可以出现在 a1 中的任何位置,但必须以相同的顺序连续出现。例如,如果名为 list1 和 list2 的变量存储以下值:
int[] list1 = {1, 6, 2, 1, 4, 1, 2, 1, 8};
int[] list2 = {1, 2, 1};
那么contains(list1, list2) 的调用应该返回true,因为list2 的值序列{1, 2, 1} 包含在list1 中从索引5 开始。如果list2 存储了值{2, 1, 2},则contains(list1, list2) 的调用将返回false,因为list1 不包含该值序列。任何两个具有相同元素的列表都被认为是相互包含的,所以像contains(list1, list1) 这样的调用应该返回true。
您可以假设传递给您的方法的两个数组的长度都至少为 1。您不能使用任何字符串来帮助您解决这个问题,也不能使用产生字符串的方法,例如 Arrays.toString。
如果有人能指出我正确的方向,那就太好了。
这也是我想出的一种尝试,但它没有足够数量的测试
public static boolean contains(int[] set1, int[] set2) {
boolean contains = false;
for (int i = 0; i < set1.length; i++) {
for (int a = 0; a < set2.length - 1; a++) {
if (set1[i] == set2[a] && set1[i + 1] == set2[a + 1]) {
contains = true;
} else {
contains = false;
}
}
}
return contains;
}
【问题讨论】:
-
在第一个循环中,注意越界,
i < set1.length - set2.length,因为你匹配的是 set1[i+1],如果 i 是最后一个索引,你的程序会崩溃。否则你基本上是在正确的轨道上。 -
您需要一个循环来尝试将一个数组与另一个数组进行比较。当您找到匹配项时,您会寻找下一个值。如果到达第二个数组的末尾,则匹配,如果到达第一个数组的末尾,则失败。
标签: java arrays integer contains