【问题标题】:Can't get last element in arrayList without knowing the length在不知道长度的情况下无法获取 arrayList 中的最后一个元素
【发布时间】:2022-01-03 02:13:55
【问题描述】:
import java.util.Scanner;
import java.util.ArrayList;

public class kek2 {

    
    public static void main(String[] args) {
        Scanner imeskanera = new Scanner(System.in);
        ArrayList<String> wordlist = new ArrayList <String>();
        
        while(true) {
            System.out.println("Type a word: ");
            String word = imeskanera.nextLine();
        
            int lenght =wordlist.size();
            if(word.equals("")) {
                for(int i = 0;i<lenght; i++) {
                    
                System.out.println(wordlist.get(lenght-i));}
                break;
            } 
            wordlist.add(word);
            
            }
        }
    }
    

我试图以相反的顺序打印出数组,但在(lenght-i) 部分出现错误,对我来说一切都很好,是不是我做错了 Java 不允许的事情?

【问题讨论】:

  • i为零时,lenght-i等于lenght,太大了。最后一个允许的索引是lenght-1。所以lenght - 1 - i 会更有意义。
  • 你也可以反转一个for循环,在你的情况下,头部看起来像for (int i = length-1; i &gt;= 0; i--)

标签: java arrays arraylist


【解决方案1】:

最好将while 循环限制为读取输入,当用户完成后,以任何所需的顺序打印列表内容。

Scanner imeskanera = new Scanner(System.in);
List<String> wordlist = new ArrayList<>();

String word;

System.out.println("Type a word: ");
while(!(word = imeskanera.nextLine()).isEmpty()) {
    wordlist.add(word);
    System.out.println("Type a word: ");
}
for (int i = wordlist.size(); i-- > 0;) { // index decremented in condition
    System.out.println(wordlist.get(i));
}

ListIterator 可以使用List::listIterator 检索,其方法hasPrevious() / previous() 可用于反向迭代——但是,无论如何都需要列表的大小:

for (ListIterator i = wordlist.listIterator(wordlist.size()); i.hasPrevious();) {
    System.out.println(i.previous());
}

【讨论】:

    猜你喜欢
    • 2019-10-05
    • 1970-01-01
    • 2017-01-12
    • 2012-04-17
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 2014-07-23
    相关资源
    最近更新 更多