比较数组和返回语句

时间:2018-03-09 01:37:40

标签: java arrays return

我正在寻找一些关于我编写的方法的反馈。我不确定我的方法是否正确。我正在尝试编写一种方法来比较两个数组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;
}

1 个答案:

答案 0 :(得分:0)

你的方法有两个问题;

  1. 如果f的长度<1,则参数验证不充分。 x的那个,你将得到一个ArrayOutOfBoundsException。

  2. 一旦找到满足测试的阵列位置,就无法返回true。反转测试并在找到未通过测试的阵列位置时返回false会更好。然后在循环结束时,返回true。

  3. 作为一种风格问题,在你的循环中进行的测试是混乱的,很难分辨出它一眼就做了什么,过多的重复测试。 我重构了基本的方向&#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;
    }