我有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;
}
任何对此的帮助将不胜感激
答案 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
,当8
为i
时将产生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;
}