我正在尝试迭代HashSet
的Integer对象,我想计算一个元素出现的次数。到目前为止这是我的方法
public int freq(int element) {
int numElements = 0;
for (int atPos : mySet){
if (mySet.atPos == element){ //says atPos cannot be resolved to a field
numElements++;
}
}
return numElements;
}
使用迭代器迭代元素会更好吗?我如何修复
mySet.atPos
行?
这是我初始化HashSet
private HashSet <Integer> mySet = new HashSet<Integer>();
答案 0 :(得分:2)
Set不能包含重复元素。因此,您shiptime = driver.find_element_by_id("app_ctl00_ctl01_lblServiceDays")
的计数总是为0或1。
对于任何集合,您可以通过以下方式获取元素的频率:
element
不确定你是不是想用它来制作方法......
答案 1 :(得分:1)
您的问题是对如何使用变量的简单误解。 int atPos
和mySet.atPos
不指同一件事。前者指的是局部变量,后者正在寻找一个集合实例的字段的公共成员,称为同一个东西。
您正尝试访问此字段:
public class HashSet
{
public int atPos; //<<<
}
但是,当我们这样想的时候,显然HashSet
中不存在该字段!
您需要做的就是摆脱mySet.
,您的代码将会正常运作。
if (atPos == element){
numElements++;
}
使用迭代器迭代元素会不会更好?
不,在这种情况下使用迭代器没有任何好处。每个A都更具可读性。
正如其他人所说,因为集合永远不会包含重复项,所以numElements
实际上只会是一个或零。因此,您实际上可以非常紧凑地编写函数:
public int freq(int element) {
if (myset.contains(element)) {
return 1;
}
else {
return 0;
}
}
甚至更好地使用三元运算符:
public int freq(int element) {
return myset.contains(element) ? 1 : 0;
}