【问题标题】:Comparing Arrays and Return Statement比较数组和返回语句
【发布时间】:2018-03-09 01:37:40
【问题描述】:

我正在寻找有关我编写的方法的一些反馈。我不确定我的方法是否正确。我正在尝试编写一个方法来比较两个数组 x[] 和 z[] 是否相同,每个数组位置 f 根据下面的定义具有相同的组成(上、下、平)。如果它们相同,我想返回 true,否则返回 false。我可以假设我的数组长度相同。

定义:

数组位置f的值被认为是向上的 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] 组合 = 上、下、上、下、上

Int f = [3,6,1,5,2,5] 组合 = 上、下、上、下、上

应该返回真

例如: int x = [1,2,1,2,1,2] 组合 = 上、下、上、下、上

Int f = [3,6,1,5,2,1] 组合 = 上、下、上、下、下

应该返回假

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

【问题讨论】:

  • 还有 Code Review Stack Exchange,你考虑过发布吗?
  • 我从未听说过,但会尝试一下。谢谢!

标签: java arrays return


【解决方案1】:

您的方法有两个问题;

  1. 参数验证不充分,如果f的长度

  2. 一旦找到满足测试的数组位置,就无法返回 true。最好在找到未通过测试的数组位置后立即反转测试并返回 false。然后在循环结束时,只返回true。

就风格而言,循环内的测试很混乱,很难一眼看出它在做什么,重复的测试太多。 我会将基本的“方向”测试重构为它自己的函数,如下所示:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多