Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用Arrays.asList()对数组执行列表函数_Java_Arrays_List - Fatal编程技术网

Java 如何使用Arrays.asList()对数组执行列表函数

Java 如何使用Arrays.asList()对数组执行列表函数,java,arrays,list,Java,Arrays,List,提示:给定一个整数数组,如果该数组在2旁边包含2或在4旁边包含4,则返回true,但不能同时包含这两个 我只使用了数组,没有使用列表方法,但我想这样做是为了练习。以下是我所拥有的数组。asList()让我有些悲伤 public boolean either24(int[] nums) { List list = Arrays.asList(nums); boolean twos = list.containsAll(Arrays.asList(2, 2)); boole

提示:给定一个整数数组,如果该数组在2旁边包含2或在4旁边包含4,则返回true,但不能同时包含这两个

我只使用了数组,没有使用列表方法,但我想这样做是为了练习。以下是我所拥有的数组。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);
}
public boolean either24(int[]nums)
{
整数[]nums2=新整数[nums.length];
对于(int i=0;i
问题在于您使用的是
containsAll
方法。文件说:

如果此列表包含指定集合的所有元素,则返回true

即使您两次传入2,也只是检查列表是否包含2。换句话说,它的意思是,“这个列表有两个吗?好。这个列表有两个吗?好”

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");
            }
        }
int[]nums=新的int[]{1,2,3,4,2,3,2,2,1,-4,4,4};
int len=nums.length;
对于(int i=0;i
上面的片段并没有给你答案。您仍然需要处理问题的
部分,但不能同时处理这两部分,我将留给您。

公共静态布尔值is2or4(int[]nums){
  public static boolean is2or4(int[] nums){
    for (int i = 0; i < nums.length; i++) {
      if(nums[i] == 2){
        return nums[i+1] == 2;
      }else if(nums[i] == 4){
        return nums[i+1] == 4;
      }
    }
    return false;
  }
对于(int i=0;i

我认为上面的方法会更有效率。

容器会检查two/four是否是列表的子集。它不关心顺序

containsAll在Java中实现如下:

public boolean containsAll(Collection<?> c) {

// get iterator for collection c
Iterator<?> e = c.iterator();
// loop all elements in collection c
while (e.hasNext())
// if collection A doesn’ have such an element
if(!contains(e.next()))
return false;
return true;

} 
public boolean containsAll(集合c){
//获取集合c的迭代器
迭代器e=c.迭代器();
//循环集合c中的所有元素
while(e.hasNext())
//如果集合A没有这样的元素
如果(!包含(如next())
返回false;
返回true;
} 
如您所见,它只是告诉您第二个集合是否是第一个集合的子集,而不考虑顺序。 因此,如果您的列表有一个序列,比如2,1,2,4,那么containsAll将为2的列表提供true


解决方案:您可以实现自己版本的containsAll,比如containsOrderedAll,并使用上述实现作为参考来调用它。

如果只是简单的代码,那么这也可以做到:

public boolean either24(int[] nums) {
    String s = Arrays.toString(nums);
    boolean twos = s.contains("2, 2");
    boolean fours = s.contains("4, 4");
    return (twos || fours) && !(twos && fours);
}
试试这个:

public boolean either24(int[] nums) {
    return (Arrays.toString(nums).contains("2, 2") ^ Arrays.toString(nums).contains("4, 4"));       
}