我正在寻找一些关于我编写的方法的反馈。我不确定我的方法是否正确。我正在尝试编写一种方法来比较两个数组x []和z []是否相同,每个数组位置f具有相同的组成(向上,向下,平面),基于下面的定义。如果它们相同则我想返回true,否则返回false。我可以假设我的阵列长度相同。
说明:
数组位置f的值被认为是up
if x[f] < x[f + 1]
数组位置f的值被视为向下if x[f] > x[f + 1]
数组位置f的值被视为平坦if x[f] == x[f + 1]
例如: Int x = [1,2,1,2,1,2] Composition = up,down,up,down,up
Int f = [3,6,1,5,2,5]构图=向上,向下,向上,向下,向上
应该返回true
例如: Int x = [1,2,1,2,1,2] Composition = up,down,up,down,up
Int f = [3,6,1,5,2,1]构图=上,下,上,下,下
应该返回false
public boolean sameComp(int[] x, int[] f) {
if (x.length <= 1 && f.length <= 1) {
return true;
}
for (int i = 0; i < x.length - 1; i++) {
if (x[i] < x[i + 1] && f[i] < f[i + 1] || x[i] > x[i + 1] && f[i] > f[i + 1] || x[i] == x[i + 1] && f[i] == f[i + 1]) {
return true;
}
}
return false;
}
答案 0 :(得分:0)
你的方法有两个问题;
如果f的长度<1,则参数验证不充分。 x的那个,你将得到一个ArrayOutOfBoundsException。
一旦找到满足测试的阵列位置,就无法返回true。反转测试并在找到未通过测试的阵列位置时返回false会更好。然后在循环结束时,返回true。
作为一种风格问题,在你的循环中进行的测试是混乱的,很难分辨出它一眼就做了什么,过多的重复测试。 我重构了基本的方向&#39;测试它自己的功能如下:
public boolean sameComp(int[] x, int[] f) {
if (x.length <= 1 && f.length <= 1) {
return true;
}
if (f.length < x.length) return false;
for (int i = 0; i < x.length - 1; i++) {
if (direction(x,i) != direction(f,i)) return false;
}
return true;
}
private int direction(int[] a, int i) {
if (a[i]<a[i+1]) return -1;
if (a[i]>a[i+1]) return 1;
return 0;
}