1,2,3、... nの各値が順序付けられていないint配列にあるかどうかを判断する作業があります。私はこれが最も効率的な方法であるかどうかは分かりませんが、range [i](range [0] = 1)の順番で1-nからすべての数字を持つrangeというint []を作成しました、range [1] = 2、ect)。次に、containsAllメソッドを使用して、指定された数値の配列に範囲配列のすべての数値が含まれているかどうかを確認しようとしました。しかし、私がこれをテストすると、falseを返します。私のコードに何が問題なのですか?この問題を解決するための効率的な方法は何でしょうか?範囲内のすべての値が配列内に存在するかどうかを確認する最良の方法は何ですか? (Java)
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);
値は印刷時に偽です。
'Arrays.asList()'は、プリミティブ配列を渡すときに期待することをしません。単一のメンバー、つまり配列そのものを持つListを生成します。 – Eran