为什么我得到索引越界exception?

我已经制作了这个代码,将整个基数为10的数字转换成二进制数。 我相信的代码是它需要的一切,但我不能让我使用ArrayLists。 我花了几个小时在这个网站和其他尝试无数的改变无济于事。 我已经得到了没有和错误编译的代码,但是一旦我输入一个int,程序崩溃了。

这是代码:

import java.util.Scanner; import java.util.ArrayList; public class BinaryConverter { public static void main(String[] args) { Scanner in = new Scanner(System.in); ArrayList binary = new ArrayList(); int a = in.nextInt(); binary = binaryConverter(a); for (int i = binary.size(); i > -1; i = i - 1){ System.out.print(binary.get(i)); } } public static ArrayList binaryConverter(Integer n) { ArrayList remainder = new ArrayList(); while (n/2 != 0) { remainder.add(n%2); n = n/2; } remainder.add(n%2); return remainder; } } 

这些是java输入数字时抛出的exception。

 Jons-iMac:java jon$ java BinaryConverter 142 Exception in thread "main" java.lang.IndexOutOfBoundsException: Index 8 out-of-bounds for length 8 at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:64) at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:70) at java.base/jdk.internal.util.Preconditions.checkIndex(Preconditions.java:248) at java.base/java.util.Objects.checkIndex(Objects.java:372) at java.base/java.util.ArrayList.get(ArrayList.java:440) at BinaryConverter.main(BinaryConverter.java:16) 

我希望这是足够的信息。

在您的代码中,您将get索引值,该值被错误地评估。

  for (int i = binary.size(); i > -1; i = i - 1){ System.out.print(binary.get(i)); } 

binary.size()赋值确实超出了边界,因为索引从binary.size()计数到零,但它超出了从零到binary.size()-1

 for (int i = binary.size(); i > -1; i = i - 1){ 

假设binary包含8个元素, i首先从8开始。但是Java中的列表/数组等是从0开始的,所以索引应该是0-7。 当然,当你尝试访问binary.get(8)时,它会给你错误。 binary.get(8)