【问题标题】:Comparing elements of object arrays比较对象数组的元素
【发布时间】:2020-09-28 07:33:45
【问题描述】:

假设我有一个名为“Sequence”的类。这个类有一个实例变量private int[] tab。 还有一些方法可以创建此选项卡,例如:

public Sequence() {
    this.tab = fillAnArray(drawsNumber(5, 20));
}

private int drawsNumber(int min, int max) {
    if (min > max) {
        throw new IllegalArgumentException("Wrong range");
    }
    return new Random().nextInt(max - min + 1) + min;
}

public int[] fillAnArray(int size) {
    int[] arr = new int[size];
    arr[0] = 1;
    for (int i = 1; i < arr.length; i++) {
        arr[i] = drawsNumber(arr[i - 1], arr[i - 1] + 10);
    }
    return arr;
}

现在,我想创建一个接受两个序列对象作为参数并返回相同选项卡元素数量的方法。所以,我创建了这样的方法:

public int howManyCommonElements(Sequence c1, Sequence c2) {
    int i = 0, j = 0;
    int counter = 0;
    while (i < c1.tab.length && j < c2.tab.length) {
        if (c1.tab[i] == c2.tab[j]) {
            ++counter;
        } else if (c1.tab[i] < c2.tab[j]) {
            ++i;
        } else {
            ++j;
        }
    }
    return counter;
}

如何比较 c1.tab[i]c2.tab[j] 等单个元素?

【问题讨论】:

  • 不知道比较是什么意思? c1.tab[i] == c2.tab[j] 有什么问题?顺便说一句,这是您代码中的错误,如果选项卡具有公共元素,您的循环将永远不会完成。
  • 哎呀,我只是尝试使用与 for 循环不同的东西。你说得对,我不知道我怎么看不到问题。
  • 可以用 List 代替 int 数组吗?

标签: java arrays object


【解决方案1】:

您必须将第一个数组的每个元素与第二个数组的每个元素进行比较。为此,您必须使用 2 嵌套循环:

for (int i = 0; i < c1.tab.length; i++)
    for (int j = 0; j < c2.tab.length; j++)
        if (c1.tab[i] == c2.tab[j])
            ++counter;

【讨论】:

  • 不,元素是有序的,你不需要在现有的O(n+m) 之外创建O(n*m)
【解决方案2】:

如果你有有序元素(ASC),你可以这样做;

    int i = 0, j = 0;
    int counter = 0;
    while (i < arr1.length && j < arr2.length) {
        if (arr1[i] == arr2[j]) {
            ++i;
            ++j;
            ++counter;
        } else if (arr1[i] < arr2[j]) {
            ++i;
        } else {
            ++j;
        }
    }

【讨论】:

  • 老兄,元素已经按顺序排列了......如果你注意到了,我想知道,但 OP 甚至在此处添加答案之前解决了 cmets 的问题。
猜你喜欢
  • 2021-07-31
  • 2014-11-02
  • 1970-01-01
  • 2016-03-25
  • 1970-01-01
  • 2021-09-19
  • 1970-01-01
  • 2015-07-28
  • 1970-01-01
相关资源
最近更新 更多