簡體   English   中英

我想要一個接受數組,低數字,高數字的方法。 並返回一個只包含數字的數組

[英]I want a method that accepts an array, low number, high number. and returns an array with only numbers in between that

  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)

這是我收到的錯誤消息。

或者在偽代碼中

這是切片,即將指數從低到高。

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)}

如果高和低數字是數組索引,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;

這非常接近:

 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;
}

快速實施:

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()]);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM