我在学校的AP计算机科学课上遇到了一个问题,我陷入了困境,甚至不能想出解决它的想法。
以下是原题:
编写一个静态方法名为contains,接受两个整数数组a1和a2作为参数,并返回一个布尔值,指示a2的元素序列是否出现在a1中(是为true,否则为false)。a2中的元素序列可以出现在a1的任何位置,但必须按相同顺序连续出现。例如,如果变量list1和list2存储以下值:
然后调用
您可以假设传递给方法的两个数组长度至少为1。您不能使用任何字符串来解决这个问题,也不能使用生成字符串的方法,如Arrays.toString。
如果有人能指导我正确的方向,那就太好了。
此外,这里是我想出的一种尝试,但它没有足够数量的测试。
以下是原题:
编写一个静态方法名为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
是最后的索引,那么程序将会崩溃。否则,你基本上已经走在正确的轨道上了。 - mike