Edge.java(界面)
public interface Edge {
/**
* get the first node of the Edge.
* @return the first Node.
*/
public int getFirstNode();
/**
* get the second node of the Edge.
* @return the second Node.
*/
public int getSecondNode();
}
EdgeImpl.java(实现)
public class EdgeImpl implements Edge {
private int node1;
private int node2;
public EdgeImpl(int node1, int node2) {
this.node1 = node1;
this.node2 = node2;
}
@Override
public int getFirstNode() {
// TODO Auto-generated method stub
return node1;
}
@Override
public int getSecondNode() {
// TODO Auto-generated method stub
return node2;
}
}
first.java(我需要帮助)
import java.util.ArrayList;
import java.util.List;
public class first {
public static void main(String[] args) {
List<Edge> graph = new ArrayList<>();
Edge a = new EdgeImpl(1, 2);
Edge b = new EdgeImpl(3, 4);
graph.add(a);
graph.add(b);
}
public static void reverse(List<Edge> graph) {
int count = 0;
while(count < graph.size()) {
int temp1 = graph.get(count).getFirstNode();
int temp2 = graph.get(count).getSecondNode();
graph.get(count).getFirstNode() = temp2;
graph.get(count).getSecondNode() = temp1;
count = count + 1;
}
}
}
Edge接口只有两个int值,我们有两个getter。
我们有一个像这样的列表[EdgeImpl(1,2),EdgeImpl(3,4)]
我希望将其列入[EdgeImpl(2,1),EdgeImpl(4,3)]。这正是反向方法的作用。
除非
我可以编辑界面或实现,所以我不能添加一个set方法,它必须是IN-PLACED。
我的尝试失败了,因为我无法使用get方法进行交换。我对如何交换它们非常困惑
有任何帮助吗?
答案 0 :(得分:0)
如果您无法更改现有的EdgeImpl
,请创建新的!{/ p>
我认为你的意思是&#34;就地&#34;是你不能返回一个新列表,你必须修改传入的列表。你应该被允许创建新的EdgeImpl
。如果没有,那么这将涉及反思,这不是非常微不足道。
public static void reverse(List<Edge> graph) {
for (int i = 0 ; i < graph.size() ; i++) {
int temp1 = graph.get(i).getFirstNode();
int temp2 = graph.get(i).getSecondNode();
EdgeImpl newEdge = new EdgeImpl(temp2, temp1);
graph.set(i, newEdge); // this overwrites the element in the list at position i.
}
}