Java Arraylist 有 java.lang.IndexOutOfBoundsException?

标签 java exception arraylist outbound

我是一名普通的 3D 美术师,转行开始学习编程。 我对 c106a 讲义 #5 有疑问。

代码有效,但我这里仍然有一些错误日志。

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 4, Size: 4
at java.util.ArrayList.RangeCheck(ArrayList.java:547)
at java.util.ArrayList.get(ArrayList.java:322)
at UniqueNames.showUnique(UniqueNames.java:23)
at UniqueNames.main(UniqueNames.java:39)

为什么可以自行扩展容量的Arraylist 仍然会出现OutOfBoundsException

这是我的完整代码:

import acm.io.*;
import acm.program.ConsoleProgram;
import acm.util.*;
import java.io.*;
import java.util.ArrayList;
import java.lang.*;

public class UniqueNames extends ConsoleProgram{

  static ArrayList<String> meString = new ArrayList<String>();
  static String input ;

    public static void storeUnique(String input){
        if (!meString.contains(input))
           {
            meString.add(input);
            }
    }

    public static void showUnique(ArrayList<String> meString){
        System.out.println("Unique name list contains:");
        for(int i=0 ;i<= meString.size() ;i++){
            System.out.println(meString.get(i));
          }
      }

    public static void main(String[] args){

             try{
                InputStreamReader stream = new InputStreamReader(System.in);
                BufferedReader br = new BufferedReader(stream);
                   while (true){
                       System.out.println("Enter name:");
                       String input = br.readLine();
                       if (input.equals("")) break;
                       storeUnique(input);
                      }  

                  {showUnique(meString);}  
                }
             catch(IOException e){
                }
    }
}

最佳答案

以下几行:

for (int i = 0; i <= meString.size(); i++) {
    System.out.println(meString.get(i));
}

应该是:

for (int i = 0; i < meString.size(); i++) {
    System.out.println(meString.get(i));
}

这是因为列表的索引是从零开始的。

Index: 4, Size: 4 解释多一点。当您调用 get(4) 时,会发生异常,因为您的列表只有 4 个大小。get(4) 将尝试访问列表中的第 5 个元素。

您可以访问的有效元素是get(0)get(1)get(2)get (3).

关于Java Arraylist 有 java.lang.IndexOutOfBoundsException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18446302/

相关文章:

java - 如何存储 ArrayList<HashMap<String, String>>

java - 用于多个 recyclerview 的单个适配器

java - 如何在Spring和GlassFish 5中做分布式事务XA?

c# - 在 C# 中避免 Azure DocumentDB 中的任务取消异常

java - 如何从 Fragment 中的 JSON 响应中的对象获取数据

android - 为什么不能从其他类访问arraylist?

java - 在 Spring 中克隆现有的 ApplicationContext

java - JUnit 测试 : How to check for errors with a try-catch block

java - 为什么我会收到此 JspException?

java - 我可以创建集合数组吗?