【问题标题】:print elements in decreasing order of ArrayList<String>按 ArrayList<String> 的降序打印元素
【发布时间】:2014-11-24 18:10:10
【问题描述】:

此处的代码接受来自用户的 5 个字符串,我希望它们从最后一个保存到第一个,即第一个输入到最后一个位置,最后一个输入到 ArrayList 中的第一个位置。据我了解,我应该在循环之前定义 ArrayList 的大小,但我可能错了。

例如:-如果用户输入String0,String1,String2,String3,String4,那么它应该以这种形式的ArrayList保存[String4,String3,String2,String1,String0]

我这样做的方式是这样的 我收到错误 Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 4, Size: 0 第一次用户输入后。

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;

public class Example
{
public static void main(String[] args) throws Exception
{

    ArrayList<String> list = new ArrayList<String>();
    BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
    for (int i=4;i>=0;i--){
        list.add(i,reader.readLine());
    }
    for (String aList : list)
    {
        System.out.println(aList);
    }

}
}

非常感谢。

【问题讨论】:

    标签: java string arraylist indexoutofboundsexception


    【解决方案1】:

    当您阅读第一行时,ArrayList 中还没有任何内容,但您正在尝试 add 索引 4 处的行,该行尚不存在,导致异常。 add method javadocs (taking an index) 状态:

    投掷:

    IndexOutOfBoundsException - 如果索引超出范围(index size())

    如果您想在所有其他元素之前添加它,请始终将其添加到索引 0

    list.add(0,reader.readLine());
    

    【讨论】:

      【解决方案2】:

      您不需要定义数组列表的大小。数组列表是一个动态数组,其大小可以动态变化。

      list.add(0,reader.readLine());
      
      for (int i=0;i<=4;i++){
          list.add(0,reader.readLine());
      }
      

      这将在位置 0 添加每个下一个元素,将所有内容移回 1。 当 arraylist 的大小为 0 时,您试图在位置 4 插入。

      【讨论】:

        【解决方案3】:

        将字符串添加到列表后,您可以按降序对列表进行排序。

        方法一: 将 Collections.reverseOrder() 方法与 Collections.sort() 一起使用,以便按如下所示按降序对列表进行排序

        Collections.sort(arraylist, Collections.reverseOrder());
        

        方法二:可以先对列表进行升序排序,再倒序排列

        Collections.sort(list);
        Collections.reverse(list);
        

        【讨论】:

          猜你喜欢
          • 2019-05-17
          • 2014-06-29
          • 2023-03-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-09-13
          • 1970-01-01
          • 2021-05-22
          相关资源
          最近更新 更多