gpt4 book ai didi

java - 尝试在 JAVA 中合并两个数组时获得额外的数字

转载 作者:行者123 更新时间:2023-11-29 07:50:57 27 4
gpt4 key购买 nike

在我的任务中,我需要合并两个集合(整数数组),但出于某种原因我得到了错误的输出...

这是类集的属性:

private int []set; 
private int counter;
private int max = 10;

这是我用来获取数字的构造函数(我需要使用可变参数,因为我需要能够更改集合中元素的数量):

public Set (int...numbers) {

set = new int[max];
counter = 0;

for (int i = 0; i < numbers.length; i++) {

if (!this.isMember(numbers[i])) {
this.set[this.counter] = numbers[i];
this.counter++;
}
}
}

这是联合方法:

public Set union (Set setToUnion) {

Set setToReturn;

if (this.equals(setToUnion)){
setToReturn = new Set(setToUnion);
return setToReturn;
}

setToReturn = new Set(this.set);

for (int i = 0; i < setToUnion.counter; i++) {

if (!setToReturn.isMember(setToUnion.set[i])) {
setToReturn.set[setToReturn.counter ] = setToUnion.set[i];
setToReturn.counter++;
}
}
return setToReturn;
}

如果您想查看 isMember 的外观,请看这里(只是检查某个数字是否是其他集合的成员):

public boolean isMember (int n) {

if (isEmpty()) {
return false;
}

for (int i = 0; i < this.counter; i++) {

if (n == this.set[i]) {
return true;
}
}

return false;
}

现在在程序中我创建了两个这样的集合:

Set someSet = new Set(1,2,3,4,5);       
Set anotherSet = new Set(2,6,7,8,9);

Set m = someSet.union(anotherSet);

m.show();

但我得到的输出是 (1,2,3,4,5,0,6,7,8,9) 并且我需要相同的输出但中间没有 0...

请帮忙谢谢!

最佳答案

问题似乎是联合方法中的这一行:

setToReturn = new Set(this.set);

大概应该是:

setToReturn = new Set(this);

为什么这会导致问题?此时,this.set等于[1, 2, 3, 4, 5, 0, 0, 0, 0, 0],是一个int数组。因此,将调用以下构造函数:

public Set (int...numbers) { ... }

这意味着将添加数组中的所有数字,包括零。要么您需要通过执行类似...的操作来截断数组中的零

setToReturn = new Set( Arrays.copyOf( set, counter ) );

或者有一个接受 Set 的构造函数。这样您就可以访问 counter 以查看数组中有多少数字实际上是 Set 的一部分。我猜你已经有了那个构造函数,基于调用这样一个构造函数的代码的另一部分。

关于java - 尝试在 JAVA 中合并两个数组时获得额外的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21291586/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com