java - ArrayList get 方法越界

标签 java arraylist

我一直致力于创建一个小的阴影方法,但不断出现相同的 IndexOutOfBoundsException 错误。我不认为我错过了太多吗?

import java.util.ArrayList;

public class Shades {

    public static String shades(String hex, int offset) {
        hex = hex.replace("#", "");
        String[] rgb_hex = hex.split(".{2}");
        ArrayList<Integer> rgb_int = new ArrayList<>();
        for (String i : rgb_hex) {
            int intg = Math.min(255, Math.max(
                    0, Integer.parseInt(i, 16) + offset));
            rgb_int.add(intg);
        }
        return String.format("%02x%02x%02x", rgb_int.get(0), 
            rgb_int.get(1), rgb_int.get(2));
    }
    public static void main(String[] args) {
        System.out.println(shades("#000000", 20));
    }
}

最佳答案

您假设 hex.split(".{2}"); 返回一个包含 3 个元素的数组。我怀疑情况并非如此。如果您调试到该行,您应该会看到数组列表的元素少于 3 个。我相信没有句号的字符串可以做到这一点。如果发现的元素少于 3 个,也许您需要抛出 IllegalArgumentExceprtion 或其他异常。

然后当你这样做时:

    return String.format("%02x%02x%02x", rgb_int.get(0), 
        rgb_int.get(1), rgb_int.get(2));

如果rgb_int没有3个元素,这将生成异常。异常中的行号应该为您提供线索。

将来,至少在 SO 帖子中显示异常的相关行并显示与其相对应的行始终是一个好主意。

关于java - ArrayList get 方法越界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16097070/

相关文章:

java - 原生 sql 查询 - SQL 注入(inject)攻击

java - 试图从 Arraylist 中删除一个对象 - 仍然可以访问对象

java - 不使用 Lines2D 的橡皮筋

java - ArrayList - 清除列表还是重新初始化它更好?

java - Swing - JPanel背景颜色消失

java - 了解 Mockito 框架背后发生的事情

java - Spring Data JPA 规范 groupBy

java - Apache Derby 中作为 ENUM 替换的用户定义类型

java - 如何在java中对csv文件中的整数列进行排序

java - 扫描仪跳过文件中的每一行