我制作了这段代码。我认为这是错误的。
public void display() {
for (int i = 0; i < tabT.length; i++)
if (tabT[i] != null)
for (int j = 0; j <= i; j++)
if (tabT[i] != tabT[j])
System.out.println(tabT[i].getCar());
}
如何在数组中显示没有冗余的元素?
答案 0 :(得分:1)
通过equals()
比较的对象例如
if (!tabT[i].equals(tabT[j]))
您正在比较参考值而不是对象
for (int i=0; i< tabT.length; i++) {
boolean f = false;
for (int j=i+1; j <tabT.length; j++)
if (tabT[i].equals(tabT[j])) {
f=true;
break;
}
if (!f)
System.out.println(tabT[i].getCar());
}
这应该为您提供i
和j
不重复的所有组合,因此我们不会多次比较它们。
答案 1 :(得分:1)
如果您只想使用数组,可以执行以下操作:
创建一个临时(辅助)数组,其中包含目前在tabT
中看到的每个元素。然后,在打印值之前,检查它是否没有出现在辅助数组(tmp)中。
例如,如果您的值为tabT
,并且您不想多次打印每个值:
int[] tabT = {1,2,3,1,1,2,6,7,2,7,1};
int[] tmp = new int[tabT.length];
boolean flag;
for (int i = 0; i < tabT.length; i++) {
tmp[i] = tabT[i];
flag = true;
for (int j = 0; j < tmp.length; j++)
if (tabT[i] == tmp[j] && i!=j) {
flag = false;
}
if(flag)
System.out.println(tabT[i]);
}
输出:[1,2,3,6,7]
您可以轻松地将此想法应用到您的程序中,并且您只需打印一次元素:
Cars[] tmp = new Cars[tabT.length]; //Assuming tabT is from type Cars[]
boolean flag = true;
for (int i = 0; i < tabT.length; i++) {
tmp[i] = tabT[i];
if (tabT[i] != null) {
for (int j = 0; j < tmp.length; j++)
if (tabT[i].getCar().equals(tabT[j].getCar()) && i!=j)
flag = false;
if(flag)
System.out.println(tabT[i].getCar());
}
}
这将只打印一辆汽车(或任何你正在打印的汽车)。
答案 2 :(得分:0)
将tabT数组放入Set中。没有重复的项目。
Set tabTList = new HashMap(Listjava.util.Arrays.asList(tabT);
答案 3 :(得分:0)
如果您想要跟踪重复计数,可以考虑使用HashMap。迭代数组一次,将对象放入HashMap及其各自的计数。然后再次遍历数组,检查HashMap。这将是O(n)时间而不是潜在的O(n ^ 2)
答案 4 :(得分:0)
==
和!=
测试对象级别的相等性(即两个实例是否相同)。你需要的是比较每个对象所代表的值(例如,如果两个字符串是等于的),那么你需要询问是否!tabT[i].equals(tabT[j])
,并使tabT
的元素实现equals
)
或者将数组转换为集合,从而删除重复项。
T[] tabT = ...
Set<T> set = new LinkedHashSet<T>(Arrays.asList(tabT))
for (T t:set) System.out.println(t);
我使用了LinkedHashSet
因为它保留了数组中元素的顺序。请注意,您需要实施equals
和hashcode
。
答案 5 :(得分:0)
为什么不尝试这样的事情呢? (我假设您正在使用String类型)
HashSet<String> hashSet = new HashSet<String>();
for (int i = 0; i < tabT.length; i++) {
hashSet.add(tabT[i]);
}
您不能将重复项放入集合中,因此现在您可以迭代该集合以获取唯一身份。
java.util.Iterator<String> iterator = hashSet.iterator();
while (iterator.hasNext()) {
System.out.println((String)iterator.next());
}