【问题标题】:java.lang.IndexOutOfBoundsException: Index: 11, Size: 11java.lang.IndexOutOfBoundsException:索引:11,大小:11
【发布时间】:2020-09-19 06:11:01
【问题描述】:

我正在尝试执行一个 java 方法 solve(String s),它接受字符串并返回字符串中存在的最大数字。 (字符串包含字母和数字)。每当我尝试运行代码时,它都会引发错误 - java.lang.IndexOutOfBoundsException: Index: 11, Size: 11 这是我的代码:

    public ArrayList<Integer> getIntArray(ArrayList<String> stringArray) {
      ArrayList<Integer> result = new ArrayList<Integer>();
      for(String stringVal : stringArray) {
         result.add(Integer.parseInt(stringVal));  
      }
      return result;
   } 
   
   public int solve(String s) {
      StringBuilder str = new StringBuilder(s);
      ArrayList<String> arr = new ArrayList<String>();
      String[] strArr = s.split("");
      for(int i = 0; i < strArr.length; i++) {
         arr.add(strArr[i]);  
      }
      for(int i = 0; i < strArr.length; i++) {
         if(!Character.isLetter(i)) {
            arr.remove(i);   
         }
      }
      ArrayList<Integer> intArr = new ArrayList<Integer>();
      intArr = getIntArray(arr);
      return Collections.max(intArr);

谢谢。任何帮助将不胜感激。

【问题讨论】:

标签: indexoutofboundsexception


【解决方案1】:

问题很可能出在第二个 for 循环中:在循环停止条件下,您正在检查 strArr 数组的长度,而在循环内,您正在从 arr 列表中删除元素。 顺便说一句,您的代码还有其他几个问题:

  • 遍历列表并删除循环内的元素并不是一个好主意(它不会像您期望的那样工作)您可以在第一个循环中添加条件,或者更好的是,使用流。
  • Character.isLetter(i) 总是假的,可能你的意思是Character.isLetter(arr[i])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-02
    • 2013-12-21
    • 2017-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多