我一直致力于创建一个小的阴影方法,但不断出现相同的 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/