数组超出界限

时间:2014-08-25 11:54:42

标签: java arrays

我无法弄清楚为什么阵列出界,eclipes说问题出在第15行

  

int d = array [1] - array [0];

import java.util.*;

public class Arrays1 {
    static Scanner reader = new Scanner(System.in);

    public static void main(String[] args) {
        int N = reader.nextInt();
        int[] array = new int[N];
        boolean right = true;
        for (int i=0; i<array.length; i++)
        {
            System.out.println("Enter number for array");
            array[i] = reader.nextInt();
        }
        int d = array[1] - array[0];
        if ((array[N]-1)%d !=0)
        {
            right = false;
        }
    }

}

3 个答案:

答案 0 :(得分:2)

你可能想要这样的东西:

public class Main {

    static Scanner reader = new Scanner(System.in);

    public static void main(String[] args) {
        int N = reader.nextInt();
        int[] array = new int[N];
        boolean right = true;
        for (int i=0; i<array.length; i++)
        {
            System.out.println("Enter number for array");
            array[i] = reader.nextInt();
        }
        int d = array[1] - array[0];
        if ((array[N-1])%d !=0)
        {
            right = false;
        }
    }

}

看一下这部分:

if ((array[N-1])%d !=0)

你在做:if ((array[N]-1)%d !=0)

顺便说一下,相信扫描是个问题,你需要多次验证。

答案 1 :(得分:1)

由于您从阅读器读取数组的边界,因此它可能是0或1.为了确保它足够大,您可以尝试以下方法:

   if(N > 1) {
        int d = array[1] - array[0];
        if ((array[N]-1)%d !=0)
        {
            right = false;
        }
   }

如果你的申请工作必须大于1,你可以在开头确认这个禁令:

int N = reader.nextInt();
if(N <= 1) {
   System.out.println("N must be bigger than 1");
   System.exit(1); // exit with error code
}

答案 2 :(得分:0)

尝试在阅读Array项之前验证用户输入,因为用户可能会输入 1 ,例如当提示他输入数组大小时,因此只有一个项目在数组中并访问第二个索引中的项(基于0的1)将导致ArrayOutOfBoundsException

import java.util.*;

public class Arrays1 {
  static Scanner reader = new Scanner(System.in);

  public static void main(String[] args) {
    int N = reader.nextInt();
    while (N < 2) {
      System.out.println("Enter a valid size for the array");
      N = reader.nextInt();
    }
    int[] array = new int[N];
    boolean right = true;
    for (int i=0; i<array.length; i++)
    {
      System.out.println("Enter number for array");
      array[i] = reader.nextInt();
    }
    int d = array[1] - array[0];
    if ((array[N]-1)%d !=0)
    {
      right = false;
    }
  }
}

作为旁注,请注意遵循camelCase中的Java命名约定,因此标识符可以以小写字符开头,而不是以较高字符开头,例如 int N ,这应该是 int n