Cómo implementar compareTo en un método genérico que toma una matriz genérica como argumento?

WebStormer:

Estoy tratando de poner en práctica un método, que, dada una matriz genérica, y dos valores de índice, cortar la matriz, y encontrar el elemento más grande entre los dos números dados.

<T extends Comparable<? super T>> T max(T[] array, int firstIndx, int secondIndx) {        //requires comparable
    T maxElement = array[0];      //8
    System.out.println(Arrays.toString(array));

    for (int i = firstIndx; i < secondIndx - 1; i++) {
        for (int j = firstIndx + 1; j < secondIndx; j++) {
            if (array[i].compareTo(array[j]) > 0) {
                maxElement = array[i];
                array[i] = array[j];
                array[j] = maxElement;
            }
        }
    }

    System.out.println(Arrays.toString(array));
    return maxElement;
}

Pero durante las matrices de enteros [8, 4, 6, 20, 1], está intercambiando correctamente sólo los primeros dos elementos, y me da los elementos máximos equivocadas. ¿Qué hay de malo en el código?

Jordan:

Hay dos problemas con su tipo. La primera es que usted está utilizando firstIndxy secondIndx, pero en función de cómo está estructurado el código, que está tratando de que el segundo número como si fuera el segundo índice menos 1 .

La segunda cuestión es que el bucle interior está empezando a volver firstIndxcada vez que rompe el ordenamiento de burbuja. Se tiene que empezar a i.

Prueba esta modificación a su bucles:

for (int i = firstIndx; i <= secondIndx - 1; i++) { // Notice the "<=".
    for (int j = i + 1; j <= secondIndx; j++) { // j starts at i
    // ... existing bubble sort code goes here
    }
}

Editar: Me olvidó mencionar que su enfoque no se encuentra el máximo si el máximo ya está en su posición ordenada. Usted sólo debe agarrar el máximo de array[secondIndx]después de que haya terminado la clasificación.


Dicho sea de paso, firstIndxes un nombre de variable bastante malo. Es sólo una letra más que escribirlo en su totalidad: firstIndex.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=330525&siteId=1
Recomendado
Clasificación