Iterating through List but it only shows last item

后端 未结 2 1309
暖寄归人
暖寄归人 2021-01-21 21:09

What I am trying to achieve is have one JLabel to display multiple items from a List.

I have defined the list as below but when I test the code

2条回答
  •  半阙折子戏
    2021-01-21 22:10

    In order to locate next string from collection, you need somehow know about current item.

    One approach is to store index (or iterator) in a field:

    List strings=<...>
    // 1. store index    
    int sentenceIndex = 0; 
    // 2. store iterator. You could get ConcurrentModificationException if change list and then use iterator.
    Iterator iterator = strings.getIterator();
    private void buttonpressActionPerformed() { 
    // 1. use index. 
    if (sentenceIndex < strings.size()-1) { // avoid IndexOutOfBoundException
      String nextSentence = strings.get(sentenceIndex++);
    }
    // 2. use iterator
    if (iterator.hasNext()) {
      String nextSentence = iterator.next();
    }
    

    But in fact you don't need to store something:

    // 3. calculate current index
    String currentSentence = jLabel1.getText();
    int currentIndex = strings.indexOf(currentSentence);
    int nextIndex = incrementIndex(currentIndex);
    String nextSentence = strings.get(nextIndex );
    

    Note that I suggest new method incrementIndex. In it you could add not only lenght check but also jumping from last element to the first or just random selecting.

    Each method has pro and contras:

    1. index require boundary checks

    2. iterator limits list updating

    3. index calcucaliton also require boundary checks and label1 should have correct initial value

      I would prefer storing index but it's your choice

提交回复
热议问题