我无法弄清楚为什么阵列出界,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;
}
}
}
答案 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 。