[英]Rotating List left and right
我正在考虑从列表中获取下一个和上一个元素,但是我无法正确处理-在列表的范围内出现问题。 也许有人有更好的概念来解决这个问题?
public class Test {
private char heading = 'N';
List<Character> cardinal = Arrays.asList('N', 'E', 'S', 'W' );
ListIterator<Character> iterator = cardinal.listIterator();
public static void main(String[] args) {
Test test = new Test();
System.out.println("heading = " + test.heading);
test.rotateLeft(); System.out.println("Rotating left...");
System.out.println("heading = " + test.heading);
test.rotateLeft(); System.out.println("Rotating left...");
System.out.println("heading = " + test.heading);
}
public void rotateRight() {
this.heading =
(iterator.hasNext() ? iterator.next() : cardinal.get(0));
}
public void rotateLeft() {
this.heading =
(iterator.hasPrevious() ? iterator.previous() : cardinal.get(3));
}
}
问题在于,当您到达列表的末尾时,不会重置迭代器。 从那时起, iterator.hasNext()
将始终返回false。 一个简单的解决方法:
public void rotateRight() {
if (!iterator.hasNext())
iterator = cardinal.listIterator();
this.heading = iterator.next();
}
public void rotateLeft() {
if (!iterator.hasPrevious())
iterator = cardinal.listIterator(cardinal.size());
this.heading = iterator.previous();
}
如果您的列表是final
,它将变得更加容易:
int index = 0;
public void rotateRight() {
index = (index + 1) % cardinal.size();
this.heading = cardinal.get(index);
}
public void rotateLeft() {
index = (index - 1 + cardinal.size()) % cardinal.size();
this.heading = cardinal.get(index);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.