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

Rob*_*bCo 1 java arrays

我目前正在尝试解决Euler项目的问题38,虽然我显然试图自己解决所有问题但我似乎遇到了一堵砖墙,我想我需要你的帮助.

所以这是我的代码:

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

Era*_*ran 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};
Run Code Online (Sandbox Code Playgroud)

    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};
Run Code Online (Sandbox Code Playgroud)