希望另一个简单的问题不应该是困难的,但我是Java的新手并且在苦苦挣扎。我在类setElements
中有一组classA
,它是一组花药类'对象(classB
),它总是只包含两个元素。我需要做的是准备一个接受参数的方法,然后检查setElements
的任何一个元素是否等于该参数。如果一个元素相等,则该方法返回该集合中的 other 元素。
我真的很难将功能拿出来,而且我很确定这是因为我平庸的Java技能:)
这是我现在的代码:
Set<classB> setElements = new HashSet<classB>();
public classA(classB x, class B y) {
setElements.add(x);
setElements.add(y);
\\method to return the other element if one element is equal to argument
public classB otherElement(classB argument){
for (classB x:setElements){
if (x==argument){
return \\other element in setElements} } }
请帮忙!
答案 0 :(得分:0)
如果您的Set总是包含两个元素,您可以将其转换为数组,然后使用索引循环:
public classB otherElement(classB argument) {
classB[] arrayElements = new classB[2];
setElements.toArray(arrayElements);
for (int i=0; i<arrayElements.length; i++) {
if (arrayElements[i] == argument) {
return setElements[1-i];
}
}
}
答案 1 :(得分:0)
我不知道为什么这种方法被建模为Set
。如果元素必须是唯一的,那么使用List会更容易。尽管如此,假设Set中有两个元素,那么可以迭代Set,跟踪找到的内容。类似的东西:
public classB getOtherFromSet(classB arg)
{
// setElements is the set of elements, with two entries
classB otherVal = null;
for (classB x : setElements) {
if (! (x.equals(arg)) {
otherVal = x;
}
}
return otherVal;
}
注意如果Set只包含一个等于参数的值,它可以返回null。
顺便说一句,如果遵循关于类名的Java约定,那将是最好的。
答案 2 :(得分:0)
首先,您不能直接从您的班级中添加HashSet
元素。您必须按照以下方法进行操作:
public void init() {
setElements.add(x);
setElements.add(y);
}
根据您的要求,我建议您使用ArrayList
代替HashSet
。
以下是代码段:
public classA(classB x, classB y) {
private List<classB> setElements = Arrays.asList(x, y);
public classB otherElement(classB argument) {
if(0 == setElements.indexOf(argument)) {
return setElements.get(1);
}
return setElements.get(0);
}
}
答案 3 :(得分:0)
通用Set
中的元素没有任何已定义的顺序,因此从技术上讲,没有“第一”或“第二”元素。但在你的情况下,任务很明确。
如果您确定该集合总是包含两个元素,那么您可以在没有循环和转换的情况下完成所有工作:
public classB otherElement(classB argument){
Iterator<classB> iterator = setElements.iterator();
classB first = iterator.next();
classB second = iterator.next();
if (first.equals(argument))
return second;
if (second.equals(argument))
return first;
return null;
}
如果您也确定argument
将始终等于“first”或“second”元素,那么您可以更简单地表达这一点:
public classB otherElement(classB argument){
Iterator<classB> iterator = setElements.iterator();
classB first = iterator.next();
return first.equals(argument) ? iterator.next() : first;
}
实际上,Set
的使用在这种情况下非常值得怀疑。
我建议创建一个带有三个参数的方法。请将此方法的可读性与前两个方法进行比较:
public classB otherElement(classB argument, classB first, classB second){
return first.equals(argument) ? second : first;
}
请注意,在大多数情况下,应通过.equals()
rather than ==
比较对象。