Arrays.asList(外部数组).containsAll(Arrays.asList(内部数组))在不应该返回false时返回false

时间:2016-06-23 13:56:58

标签: java arrays

我目前正在尝试解决Problem 38 of Project Euler,虽然我自己尝试解决所有问题,但我觉得自己似乎遇到了问题。我想我需要你的帮助。

所以这是我的代码:

import java.util.Arrays;

public class PandigitalMultiples{
    public static void main(String[]args){
        long c = 0;
        long pdLong = 0;
        for(int i = 1; i < 10000; i ++){
            String pdString = "";
            for(int n = 1; pdString.length() <= 9; n++){
                long p = n * i;
                String pString = String.valueOf(p);
                pdString = pdString + pString;
                pdLong = Long.parseLong(pdString);
                if(is1To9Pandigital(pdString) && pdLong > c && pdLong < 1000000000 && n > 1){
                    c = pdLong;
                }
            }
        }
        System.out.println(c);
    }
    public static boolean is1To9Pandigital (String pNumber){
        int length = pNumber.length();
        if(length != 9){
            return false;
        }
        char[]chars = pNumber.toCharArray();
        int[]digits = new int[chars.length];
        for(int i = 0; i < chars.length; i++){
            digits[i] = chars[i] - '0';
        }
        int[]allDigits = new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9};
        boolean contains = Arrays.asList(digits).containsAll(Arrays.asList(allDigits));
        if(contains == true){
            System.out.println(pNumber);
            return true;
        }
        else
            return false;
    }
}

问题似乎是即使像918273645 Arrays.asList(digits).containsAll(Arrays.asList(allDigits))这样的数字也会返回false并且我不知道为什么!

也许有人可以帮助我?我真的很感激!

1 个答案:

答案 0 :(得分:5)

Arrays.asList(),当传递一个原始数组时,会产生一个List,其单个元素是输入数组。如果您传递的是Integer[]而不是int[],它将按您预期的方式运行。

只需更改

    int[] digits = new int[chars.length];
    for(int i = 0; i < chars.length; i++){
        digits[i] = chars[i] - '0';
    }
    int[] allDigits = new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9};

    Integer[] digits = new Integer[chars.length];
    for(int i = 0; i < chars.length; i++){
        digits[i] = chars[i] - '0';
    }
    Integer[] allDigits = new Integer[]{1, 2, 3, 4, 5, 6, 7, 8, 9};