它显示了java.lang.ArrayIndexOutOfBoundsException:2

时间:2015-09-03 07:36:13

标签: java arrays

StringTokenizer st = new StringTokenizer(bo.readLine());
int k = 0;
while (st.hasMoreTokens()) {
    a[k++] = Integer.parseInt(st.nextToken());
}//This line is giving exception.


for (int j = 0; j < k; j++) {       
   int temp = a[j];
   int temp1 = a[j + 1];
   int num = temp + temp1;

我想要输出这一行。

3 个答案:

答案 0 :(得分:0)

在这两种情况下:

  • a [k ++] = Integer.parseInt(st.nextToken());
  • int temp1 = a [j + 1];

您尝试访问a而未进行任何检查,以确定kj + 1是否会产生超出a大小的值。

您可能有一些排序int[] a = new int[1];的代码。

要解决此问题,您需要:

  • 声明一个更大的数组
  • 添加支票以确保您永远不会超出a的限制:
    • while (st.hasMoreTokens() && (k < a.length))
    • for (int j = 0; ((j < k) && ((j + 1) < a.length); j++) {

答案 1 :(得分:0)

只是为了确定,你是否初步确定了&#39; a&#39;代码中的数组...... 并且在java中你必须给出你正在使用的数组的大小...所以可能是数组的大小很小,其中变量k变得大于数组的最后一个索引&#39; a&# 39;所以我建议您使用arrayList或使用列表而不是数组...

答案 2 :(得分:0)

您必须动态更改整数数组的大小 或者只是使用数组列表或列表来存储整数

使用扫描仪读取用户输入

Scanner scanner = new Scanner(System.in)

此代码使用动态数组

StringTokenizer int_string = new StringTokenizer(scanner.nextLine());
int length = int_string.countTokens();
int integer_array [] = new int[length];
for (int i = 0; i < length; i++) {
    integer_array[i] = Integer.parseInt(int_string.nextToken());
}
System.out.println(Arrays.toString(integer_array));

此代码使用array_list

StringTokenizer int_string = new StringTokenizer(scanner.nextLine());
ArrayList<Integer> number_list = new ArrayList<>();
while (int_string.hasMoreTokens()) {
    number_list.add(Integer.parseInt(int_string.nextToken()));
}
System.out.println(Arrays.toString(number_list.toArray()));

这里是一行中的示例输入字符串:

10 20 30 40 50 450 6060 50504 989898 56456 20 10100 5460 0365 000

,输出为:

[10, 20, 30, 40, 50, 450, 6060, 50504, 989898, 56456, 20, 10100, 5460, 365, 0]