public static int [] filterRange(int [] array, int low, int high){
int numbers = 0;
for (int i = 0; i < array.length; i++){
if (i <= high && i >= low){
numbers ++;
}
}
int array1 [] = new int [numbers];
for (int i = 0; i < array.length; i++){
if (i <= high && i >= low){
array1[i] = array[i];
}
}
return array1;
}
我正在尝试编写一个不使用任何内置函数的方法。它接受一个数字数组,一个低值和一个高值,并返回一个新数组,该数组只包含高值和低值之间的数字,以及高值和低值(如果适用)。
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
at Question_1.filterRange(Question_1.java:41)
at Question_1.main(Question_1.java:13)
这是我收到的错误消息。
答案 0 :(得分:2)
或伪代码
这就是切片,即将指数从低到高。
newSize = high - low + 1;
int array1 [] = new int [newSize]
for int i = 0; i < newSize; i++
array1[i] = array[i + low]
这是选择/过滤
仍然是长期的,但我不是一个java男孩。
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;
}
我建议您查看java中的列表,然后您不需要两次完成所有操作。不是一个java男孩,但如果它没有像Ruby那样的东西我会感到惊讶
array1.select{|i| (i >= low) && (i <= high)}
答案 1 :(得分:0)
如果高和低数字是数组索引,Tony已经回答了你的问题。如果高和低数字是数组值,请参阅下面的代码。
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);
}
然后您可以使用for循环输出结果
int[] result = new int[numbers];
for (int i = 0; i < numbers; i++) result[i] = array1[i];
return result;
答案 2 :(得分:0)
这非常接近:
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;
}
只是为了yucks:
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;
}
答案 3 :(得分:0)
快速实施:
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()]);
}