возвращая подмассив размера n, предположим, что размер n находится между 1 и bestTime.length, и возвращает наименьшие вложенные массивы

#java #arrays #junit

#java #массивы #junit

Вопрос:

int[] bestTime = {50, 73, 72, 75, 71, 56, 61, 60, 62, 68, 70, 50, 70};

предположим, что если n = 6, ожидаемый возврат = {50, 50, 56, 60, 61, 62}

это то, что у меня есть до сих пор, я знаю, что есть много ошибок. любые предложения приветствуются.

 public static int[] bestRun(int n) {
int[] best = bestTime[0];

for(int i = 0; i <= bestTime.length; i   ) {
        if(bestTime[i] <= best) {
                best = bestTime[i];
                best  ;
        } return best;
    }
    if(best.length == n) {
        return best;
    }
    return null;
}
 

Ответ №1:

Создайте IntStream вашего bestTime массива, отсортируйте их, ограничьте использование n , преобразуйте в массив и верните:

 public static int[] bestRun(int n) {
    return IntStream.of(bestTime).sorted().limit(n).toArray();
}
 

Вы можете выполнить задачу также с помощью классических циклов for . Но тогда вам нужно реализовать сортировку самостоятельно. Что-то вроде приведенного ниже должно дать вам представление о том, как это можно выполнить:

 static int[] bestTime = {50, 73, 72, 75, 71, 56, 61, 60, 62, 68, 70, 50, 70};

public static void main(String args[]) throws IOException{
    int[] best = bestRun(6);
    System.out.println(Arrays.toString(best));
}

public static int[] bestRun(int n) {
    //copy your bestTime array
    int[] copy = new int[bestTime.length];
    for(int i = 0; i < copy.length; i  ){
        copy[i] = bestTime[i];
    }
    
    //sort copy
    for (int i = 0; i < copy.length; i  ) {     
        for (int j = i 1; j < copy.length; j  ) { 
           int temp = 0;
           if(copy[i] > copy[j]) {    
               temp = copy[i];    
               copy[i] = copy[j];    
               copy[j] = temp;    
           }     
        }     
    } 
    
    //fill your result array
    int[] result = new int[n];
    for(int i = 0; i < n; i  ){
        result[i] = copy[i];
    }        
    return resu<
}
 

Комментарии:

1. Можно ли решить эту проблему без импорта IntStream ?

2. например, используя циклы for и не импортируя никаких библиотек Java