簡體   English   中英

左右旋轉列表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM