
Obtener índices de un vector
Publicado por Xavi (21 intervenciones) el 03/10/2021 12:02:47
Hola,
Soy nuevo en Java y estoy intentando hacer lo siguiente. Tengo un vector que se pasa como parámetro de entrada y quiero ordenarlo de mayor a menor y después mostrar por pantalla el vector ordenado junto con la posición que ocupaba el número en cuestión en el vector original. Por ejemplo, si se le pasa el vector:, la salida debería ser:
Por el momento he hecho lo siguiente:
La salida de este trozo de código es:
Como podéis ver no estoy asignando correctamente la posición que ocupaba el número en el vector original. De hecho, estoy mostrando la posición que ocupa cada número en el vector ya ordenado. Para dar con lo que quiero, había pensado en crear un nuevo vector y buscar la posición en el vector original pero no tengo claro como hacerlo. Me podríais echar una mano?
Por si ayuda, estoy usando el siguiente tipo de test para pasar la validación:
Gracias!
Soy nuevo en Java y estoy intentando hacer lo siguiente. Tengo un vector que se pasa como parámetro de entrada y quiero ordenarlo de mayor a menor y después mostrar por pantalla el vector ordenado junto con la posición que ocupaba el número en cuestión en el vector original. Por ejemplo, si se le pasa el vector:
1
{4.2, 8.1, 9.4, 6.1, 4.7, 6.4, 6.0, 7.7}
1
2
3
4
5
6
7
8
"9.4 (2)"
"8.1 (1)"
"7.7 (7)"
"6.4 (5)"
"6.1 (3)"
"6.0 (6)"
"4.7 (4)"
"4.2 (0)"
Por el momento he hecho lo siguiente:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public static void sortAverageGradesAndShowIndices(double[] averageNotes) {
double aux;
for (int i=0; i < averageNotes.length -1; i++){
for (int j=0; j < averageNotes.length -1; j++){
// Si el numero actual es mayor al siguiente
if(averageNotes[j] > averageNotes[j+1]){
// Intercambiamos numeros
aux = averageNotes[j];
averageNotes[j] = averageNotes[j+1];
averageNotes[j+1]=aux;
}
}
}
// Orddenamos de mayor a menor
for (int i=(averageNotes.length-1); i>=0;i--){
System.out.println(String.format("%.1f (%d)",averageNotes[i],i));
}
}
La salida de este trozo de código es:
1
2
3
4
5
6
7
8
9,4 (7)
8,1 (6)
7,7 (5)
6,4 (4)
6,1 (3)
6,0 (2)
4,7 (1)
4,2 (0)
Como podéis ver no estoy asignando correctamente la posición que ocupaba el número en el vector original. De hecho, estoy mostrando la posición que ocupa cada número en el vector ya ordenado. Para dar con lo que quiero, había pensado en crear un nuevo vector y buscar la posición en el vector original pero no tengo claro como hacerlo. Me podríais echar una mano?

Por si ayuda, estoy usando el siguiente tipo de test para pasar la validación:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
@Test
@Order(4)
void testSortAverageNotesAndShowIndices() {
ByteArrayOutputStream outputStreamCaptor = new ByteArrayOutputStream();
System.setOut(new PrintStream(outputStreamCaptor));
PAC1Ex3.sortAverageGradesAndShowIndices(new double[] {4.2, 8.1, 9.4, 6.1, 4.7, 6.4, 6.0, 7.7});
assertEquals("9.4 (2)"+System.lineSeparator()
+ "8.1 (1)"+System.lineSeparator()
+ "7.7 (7)"+System.lineSeparator()
+ "6.4 (5)"+System.lineSeparator()
+ "6.1 (3)"+System.lineSeparator()
+ "6.0 (6)"+System.lineSeparator()
+ "4.7 (4)"+System.lineSeparator()
+ "4.2 (0)", outputStreamCaptor.toString().trim());
outputStreamCaptor = new ByteArrayOutputStream();
System.setOut(new PrintStream(outputStreamCaptor));
PAC1Ex3.sortAverageGradesAndShowIndices(new double[] {6.6, 7.9, 8.9, 9.6, 7.3, 6.5, 4.0});
assertEquals("9.6 (3)"+System.lineSeparator()
+ "8.9 (2)"+System.lineSeparator()
+ "7.9 (1)"+System.lineSeparator()
+ "7.3 (4)"+System.lineSeparator()
+ "6.6 (0)"+System.lineSeparator()
+ "6.5 (5)"+System.lineSeparator()
+ "4.0 (6)", outputStreamCaptor.toString().trim());
outputStreamCaptor = new ByteArrayOutputStream();
System.setOut(new PrintStream(outputStreamCaptor));
PAC1Ex3.sortAverageGradesAndShowIndices(new double[] {7.0, 7.5, 8.0, 8.5, 9.0});
assertEquals("9.0 (4)"+System.lineSeparator()
+ "8.5 (3)"+System.lineSeparator()
+ "8.0 (2)"+System.lineSeparator()
+ "7.5 (1)"+System.lineSeparator()
+ "7.0 (0)", outputStreamCaptor.toString().trim());
}
Gracias!
Valora esta pregunta


0