Java 我想要一个接受数组的方法,低数值,高数值。并返回一个数组,该数组之间只包含数字

Java 我想要一个接受数组的方法,低数值,高数值。并返回一个数组,该数组之间只包含数字,java,arrays,methods,Java,Arrays,Methods,这是我收到的错误信息 或在伪代码中 这是分层,即将索引从低到高 Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5 at Question_1.filterRange(Question_1.java:41) at Question_1.main(Question_1.java:13) newSize=high-low+1; int array1[]=新int[newSize] 对于int i=0;我喜欢新

这是我收到的错误信息

或在伪代码中

这是分层,即将索引从低到高

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
at Question_1.filterRange(Question_1.java:41)
at Question_1.main(Question_1.java:13)
newSize=high-low+1;
int array1[]=新int[newSize]
对于int i=0;我喜欢新闻化;我++
阵列1[i]=阵列[i+低]
这是选择/过滤

我现在还很忙,但我不是一个爪哇男孩

newSize = high - low + 1;
int array1 [] = new int [newSize]
for int i = 0; i < newSize; i++
  array1[i] = array[i + low]
公共静态int[]过滤(int[]数组,int低位,int高位){
整数=0;
for(int i=0;i
我建议您查看一下java中的列表,这样您就不需要全部做两次了。不是一个java男孩,但如果它没有Ruby这样的东西,我会感到惊讶

  public static int [] filterRange(int [] array, int low, int high){
      int numbers = 0; 
      for (int i = 0; i < array.length; i++){
          if (array[i] <= high && array[i] >= low){
              numbers ++; 
          }  
      }
      int array1 [] = new int [numbers]; 
      int index = 0;
      for (int i = 0; i < array.length; i++){
          if (array[i] <= high && array[i] >= low){
              array1[index] = array[i];
          index++; // should be inside the if, I'm a twit
          }
      }

      return array1;
  }

array1.选择{| i |(i>=low)&(i如果高位和低位数字是数组索引,Tony已经回答了您的问题。如果高位和低位数字是数组值,请参见下面的代码

array1.select{|i| (i >= low) && (i <= high)}
公共静态int[]过滤(int[]数组,int低位,int高位){
int[]array1=新的int[array.length];
整数=0;
for(int i=0;i
}

然后可以使用for循环输出结果

public static int [] filterRange(int [] array, int low, int high){
  int[] array1 = new int[array.length];
  int numbers = 0; 
  for (int i = 0; i < array.length; i++){
     ///// this is what you really mean, right?
       if (array[i] <= high && array[i] >= low){
           array1[numbers] = array[i];
           numbers ++; 
      }  
  }
  return Arrays.copyOfRange(array1, 0, numbers);
int[]结果=新的int[数字];
对于(int i=0;i
这一点非常接近:

int[] result = new int[numbers];
for (int i = 0; i < numbers; i++) result[i] = array1[i];
return result;
公共静态int[]过滤(int[]数组,int低位,int高位){
int size=0;
for(int i=0;i如果(array[i]>=low&&array[i]=low&&array[i]=0&&array[i].compareTo(high)快速实现:

public static <T extends Comparable<T>> List<T> filterRange(T[] array, T low, T high){
    List<T> list = new ArrayList<T>();
    for(int i=0, j=0; i< array.length; i++) {
        if(array[i].compareTo(low)>=0 && array[i].compareTo(high)<=0) list.add(array[i]);
    }
    return list;
}
public静态整数[]过滤(int[]数组,int低位,int高位){
List aux=新阵列列表();
for(int i:array){
如果(i=低){
补充(i);
}
}
返回aux.toArray(新整数[aux.size()]);
}

使用high-low获取新数组的大小。分配它。使用从低到高迭代的循环将值复制到新数组中。听起来像我认为的那样,除非我不理解?数字++给出了介于我的范围和新整数[numbers]之间的数字量生成一个如此大小的空白数组,但下一部分我无法正确理解。没有偏移量,array1[I]=array[I+low],我的答案应该更清楚。首先,你应该用代码应该使用的语言来标记它。其次,你为什么要使用循环来计数,而迪奥索已经说过了(嗯,几乎是这样)一个简单的减法可以让你更容易地得到相同的信息?我不认为减法可以使数组的大小更大,因为初始数组不一定是连续的数字。{1,5,7,9,1,2,4}更好地使用
系统。arraycopy
对于
loopWell,它比
快得多。是的,但OP似乎想直接操作。:)是的,对我来说,这应该可以很好地工作,我不明白为什么,但我仍然遇到了一个越界错误,和我的第一个回答搭档一样的问题。Guy是基于高低而不是切片进行过滤的。是的,这给出了正确的输出,但我想长期这样做。而不是使用array.copyOfRange。
 public static int[] filterRange(int[] array, int low, int high){
    int size = 0;
    for (int i = 0; i < array.length; i++){
       if(array[i]>=low && array[i]<=high) size++;
    }
    int[] array1 = new int[size];
    for(int i=0, j=0; i< array.length; i++) {
       if(array[i]>=low && array[i]<=high) array1[j++] = array[i];
    }
    return array1;
 }
public static <T extends Comparable<T>> List<T> filterRange(T[] array, T low, T high){
    List<T> list = new ArrayList<T>();
    for(int i=0, j=0; i< array.length; i++) {
        if(array[i].compareTo(low)>=0 && array[i].compareTo(high)<=0) list.add(array[i]);
    }
    return list;
}
public static Integer[] filterRange(int[] array, int low, int high) {
    List<Integer> aux = new ArrayList<Integer>();

    for (int i : array) {
        if (i <= high && i >= low) {
            aux.add(i);
        }
    }
    return aux.toArray(new Integer[aux.size()]);
}