我尝试制作一个简单的代码,用于检查数组中是否存在小于数组大小的重复数字/数字以及大于数组大小的数字。 (例如,对于大小为7的数组,数组中的数字应该在1-7之间,没有重复,否则系统将打印无效错误) 当我输入一个大小为1的数组并输入数字2时,我得到以下错误信息:
线程中的异常" main" java.lang.ArrayIndexOutOfBoundsException:1 在sumn.main(sumn.java:24)
这是代码本身,有关如何解决此问题的任何想法?
public class sumn {
public static boolean Duplicates(int arr[]) {
int a, b;
boolean flag = true;
for (a=0;a<arr.length-1;a++) {
for (b=a+1;b<arr.length;b++) {
if (arr[b]==arr[a]) {
return false;
}
}
}
return flag;
}
public static void main(String[] args) {
int N = MyConsole.readInt("Enter the size of the array:");
int arr[] = new int [N];
int i, j;
boolean flag = true;
for (i=0;i<arr.length;i++) {
arr[i]= MyConsole.readInt("Enter a number between 1 to ");
}
for (j=0;j<arr.length;j++) {
if (Duplicates(arr)==false || N<arr[i] || arr[i]<=0)
flag = false;
if (flag == false) {
System.out.println("Invalid input");
}
}
}
}
答案 0 :(得分:2)
问题出在这一行
if (Duplicates(arr)==false || N<arr[i] || arr[i]<=0)
制作
if (Duplicates(arr)==false || N<arr[j] || arr[j]<=0)
将i
替换为j
答案 1 :(得分:1)
我猜测第24行是if (Duplicates(arr)==false || N<arr[i] || arr[i]<=0)
。这里的问题是,在第一次循环后,i
的值为arr.length
。这将导致每次ArrayIndexOutOfBoundsException
。
您可以在该行上将i
替换为j
,这似乎是您打算做的。或者您可以通过编写循环来“清理”一点并将范围i
仅限于循环:
for(int i = 0; i < arr.length; i++) { ... }
而不是
int i;
for(i = 0; i < arr.length; i++) { ... }