检查是否在数组Java中找到范围内的所有数字

时间:2015-01-26 17:06:30

标签: java arrays

我被赋予编写一种方法,用于查找是否在数组中找到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);
}
}

6 个答案:

答案 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数组足够大,以容纳输入数组中出现的最大整数。

过去那个错误还有更多要纠正的事情:

  1. 您不需要将数组初始化为0,因为它已经初始化;
  2. counter可能是boolean数组,因为您不需要计数,只是存在;
  3. 如果输入中出现的数字范围以1开头,那么您可以使用a[i]-1作为counter的索引,因为您不会使用零索引。