提示:给定一个整数数组,如果该数组包含 2 旁边的 2 或 4 旁边的 4,但不是两者都包含,则返回 true。
我只使用数组而不使用列表方法来完成此操作,但我想以这种方式进行练习。这就是我所拥有的,Arrays.asList() 让我有些悲伤。
public boolean either24(int[] nums)
{
List list = Arrays.asList(nums);
boolean twos = list.containsAll(Arrays.asList(2, 2));
boolean fours = list.containsAll(Arrays.asList(4, 4));
return (twos || fours) && !(twos && fours);
}
Expected Run
either24({1, 2, 2}) → true true OK
either24({4, 4, 1}) → true true OK
either24({4, 4, 1, 2, 2}) → false false OK
either24({1, 2, 3, 4}) → false false OK
either24({3, 5, 9}) → false false OK
either24({1, 2, 3, 4, 4}) → true false X
either24({2, 2, 3, 4}) → true false X
either24({1, 2, 3, 2, 2, 4}) → true false X
either24({1, 2, 3, 2, 2, 4, 4}) → false false OK
either24({1, 2}) → false true X
either24({2, 2}) → true true OK
either24({4, 4}) → true true OK
either24({2}) → false true X
either24({}) → false false OK
更新:部分问题是使用 int 而不是 Integer。新代码:
public boolean either24(int[] nums)
{
Integer[] nums2 = new Integer[nums.length];
for(int i = 0; i < nums.length; i++)
nums2[i] = nums[i];
List list = Arrays.asList(nums2);
boolean twos = list.containsAll(Arrays.asList(2, 2));
boolean fours = list.containsAll(Arrays.asList(4, 4));
return (twos || fours) && !(twos && fours);
}
最佳答案
containsAll()
不检查两个元素是否相邻。它只检查元素是否存在于列表中。您需要遍历数组并检查相邻元素
int [] nums = new int [] {1,2,3,4,2,3,2,2,1,-4,4,4};
int len = nums.length;
for (int i = 0; i < len - 1 ; i++)
{
if((nums[i] == nums[i+1]) && (nums[i] == 2 || nums[i] == 4))
{
System.out.println("Yes");
}
}
上面的代码片段并没有给你答案。您仍然需要处理问题的 但不是两个
部分,我将留给您。
关于java - 如何使用 Arrays.asList() 对数组执行 List 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16075600/