java - 检查数组中是否存在所有值的最佳方法是什么? (java)

我的任务是确定1、2、3 ... n中的每个值是否在无序的int数组中。我不确定这是否是解决此问题的最有效方法,但是我创建了一个名为range的int [],该整数仅按范围[i](range [0] = 1 ,范围[1] = 2等)。然后,我尝试使用containsAll方法检查给定数字的数组是否包含range数组中的所有数字。但是,当我对此进行测试时,它返回false。我的代码有什么问题,什么是解决此问题的更有效方法?

public static boolean hasRange(int [] givenNums, int[] range) {
    boolean result = true;
    int n = range.length;
    for (int i = 1; i <= n; i++) {
    if (Arrays.asList(givenNums).containsAll(Arrays.asList(range)) == false) {
           result = false;
     }
   }
    return result;
}


(我很确定我应该手动执行此操作,而不要使用containsAll方法,因此,如果有人知道如何以这种方式解决问题,那将特别有用!)

对于好奇的人,这里就是这种方法的含义:

public static void checkMatrix(int[][] intMatrix) {
    File numberFile = new File("valid3x3") ;
    intMatrix= readMatrix(numberFile);
    int nSquared = sideLength * sideLength;
    int[] values = new int[nSquared];
    int[] range = new int[nSquared];
    int valCount = 0;

    for (int i = 0; i<sideLength; i++) {
        for (int j=0; j<sideLength; j++) {

            values[valCount] = intMatrix[i][j];
            valCount++;
        }
    }

    for (int i=0; i<range.length; i++) {
        range[i] = i+1;
    }

    Boolean valuesThere = hasRange(values, range);


values打印时为假。

最佳答案

第一种风格:

if (condition == false) // Works, but at the end you have if (true == false) or such
if (!condition) // Better: not condition

// Do proper usage, if you have a parameter, do not read it in the method.
File numberFile = new File("valid3x3") ;
intMatrix = readMatrix(numberFile);
checkMatrix(intMatrix);

public static void checkMatrix(int[][] intMatrix) {
    int nSquared = sideLength * sideLength;
    int[] values = new int[nSquared];


然后是问题。可以看到列表或更好的Set方法才是确切的抽象级别,这是值得称赞的:对细节的讨论不明智。但是这里只是想要的。

要知道是否存在范围[1,...,n]中的每个元素。


您可以浏览给定的数字,
对于每个数字,看看它是否在范围内是新的,将其标记为不再是新的,
如果达到n个新数字:则返回true。

int newRangeNumbers = 0;
boolean[] foundRangeNumbers = new boolean[n]; // Automatically false



想出更好的名字。