繁体   English   中英

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

[英]Checking if values in an array are within a range

我有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;
}

任何帮助,将不胜感激

您的循环不正确:

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

您检查索引i*2 ,当i4时将得出8 但是,您想查看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;  
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM