检查数组中的值是否在范围内

时间:2018-11-14 19:01:50

标签: java

我有2个数组。一个是另一个大小的两倍。 array2代表一对双打,例如,array2[0]是一个下限,array2[1]是一个上限。我想检查array1[0]是否在值array2[0]array2[1]之间,如果array1[1]是否在array2[2]array2[3]值之间,依此类推。 。如果整个数组都是这种情况,我想返回true,否则返回false。

这是我到目前为止一直在尝试的方法,但是它不起作用。

double[] array1 = new double[10];
double[] array2 = new double[20];

public boolean match(double[] array1, double[] array2) {
    boolean b = false;
    int count = 0;
    for (int i = 0; i < array1.length; i++) {
        if (array1[i] > array2[i * 2] && array1[i] < array2[i * 2 + 1]) {
            count++;  
        }
    }
    if (count == array1.length) {
        b = true; 
    }
    return b;
}

任何对此的帮助将不胜感激

1 个答案:

答案 0 :(得分:0)

您的循环不正确:

for (int i = 0; i < array1.length; i++) {
    if (array1[i] > array2[i * 2] && array1[i] < array2[i * 2 + 1]) {
        count++;  
    }
}

您检查索引i*2,当8i时将产生4。但是,您想查看i前后的索引。一种方法是跟踪您在哪个索引上,并使用该索引检查array2中的元素:

public static boolean match(double[] array1, double[] array2) {
    boolean b = false;
    int index = 0;
    int count = 0;
    for (int i = 0; i < array1.length; i++) {
        if (array1[i] > array2[index++] && array1[i] < array2[index++]) {
            count++;  
        }
    }
    if (count == array1.length) {
        b = true; 
    }
    return b;
}

使用后递增运算符,我们可以在每次调用索引时增加计数器,以便我们调用正确的索引array2


我们还可以通过在条件变为假时立即退出来使这种方法更有效:

if (array1[i] <= array2[i * 2] || array1[i] >= array2[i * 2 + 1]) {
    return false;  
}