我被赋予编写一种方法,用于查找是否在数组中找到1-N之间的所有数字(不是以任何特定顺序)。 我写了这个,但是我得到了绑定错误的ArrayIndexOut。 我真的很感激一些帮助。 谢谢!
import java.util.*;
public class test{
public static boolean lol (int [] a){
int[] counter = new int[a.length];
for(int o=0;o<counter.length;o++){
counter[o]=0;
}
for(int i=0; i<counter.length;i++){
counter[a[i]]++;
}
int check=0;
for(int t=0; t<counter.length;t++){
if(counter[t]==1){
check++;
}
}
if(check==a.length){
return true;
}
else{
return false;
}
}
public static void main(String[] args)
{
Scanner reader = new Scanner(System.in);
int b[] = {1,5,2,3,4};
lol(b);
}
}
答案 0 :(得分:1)
您已将b定义为int b[] = {1,5,2,3,4};
这里b [1]是5而b.length是5.数组索引从0开始并且上升到n-1即4.现在在lol方法中,你尝试做counter[a[i]]++;
并且如果我是1,然后你试图做一个超出数组范围的counter [5] ++。
相反,您应该使用counter[a[i]-1]++;
几点:
您的代码:
for(int o=0;o<counter.length;o++){
counter[o]=0;
}
不需要,因为计数器数组元素默认初始化为0。
答案 1 :(得分:1)
public static void hasRange(int n, int[] numbers) {
boolean result = true;
for (int i = 1; i <= n; i++) {
if (Arrays.asList(numbers).contains(i) == false) {
result = false;
}
}
return result;
}
答案 2 :(得分:1)
counter[a[i]]++;
在这一行中你应该说:
counter[a[i]-1]++;
您还应该删除最后的计数器数组。
答案 3 :(得分:0)
此行正在发生例外
counter[a[i]]++;
在b []数组中,内部值为5。该值试图索引具有[0,4]范围的counter []数组。
答案 4 :(得分:0)
代码中唯一可能的ArrayIndexOutOfBoundsException
来源是
for(int i=0; i<counter.length;i++){
counter[a[i]]++;
}
显然,数组a
包含的元素大于其长度减去一。
答案 5 :(得分:0)
这段代码毫无意义:
for(int i=0; i<counter.length;i++){
counter[a[i]]++;
}
您浏览counter
数组索引,但实际上使用它们索引到a
。相反,你应该
for(int i=0; i<a.length;i++){
counter[a[i]]++;
}
并且,当然,确保counter
数组足够大,以容纳输入数组中出现的最大整数。
过去那个错误还有更多要纠正的事情:
counter
可能是boolean
数组,因为您不需要计数,只是存在; a[i]-1
作为counter
的索引,因为您不会使用零索引。