Corrige el código: No modifiques el array
Tu amiga está intentando escribir un método que realice las siguientes transformaciones:
int[] x = new int[]{3, 3, 3, 3, 3, 3, 3};
// Cada vez que se pase x, se deben devolver los siguientes resultados:
Program.change(x, 0); // new int[]{3, 3, 3, 3, 3, 3, 3}
Program.change(x, 1); // new int[]{3, 2, 2, 2, 2, 2, 3}
Program.change(x, 2); // new int[]{3, 2, 1, 1, 1, 2, 3}
Program.change(x, 3); // new int[]{3, 2, 1, 0, 1, 2, 3}El método change() no debe modificar el array original. Después de cada llamada, el valor original de x debe seguir siendo igual a new int[]{3, 3, 3, 3, 3, 3, 3}.
Ella escribe el siguiente código:
public static int[] change(int[] x, int times) {
for (int i = 0; i < x.length; i++) {
int j = 1;
while (j <= times) {
if (i >= j && i < x.length - j) {
x[i]--;
}
j++;
}
}
return x;
}¡Ups! Parece que el código modifica el array original. Corrige este código incorrecto para que el método deje de modificar el array original.
Ejemplos
int[] x = new int[]{3, 3, 3, 3, 3, 3, 3};
// Lo que queremos:
Program.change(x, 2) ➞ new int[]{3, 2, 1, 1, 1, 2, 3}
Program.change(x, 2) ➞ new int[]{3, 2, 1, 1, 1, 2, 3}
// Lo que produce el código defectuoso:
Program.change(x, 2) ➞ new int[]{3, 2, 1, 1, 1, 2, 3} // Todo bien hasta ahora...
Program.change(x, 2) ➞ new int[]{3, 1, -1, -1, -1, 1, 3} // El array fue modificado :(Notas
- Si esto te resulta confuso, copia y pega el código incorrecto en un REPL de Java y experimenta con él para entender qué hace el método.
- Pista: Intenta crear una copia del array de entrada.
- Si esto te resulta familiar, es porque forma parte de una solución para el problema Alfombra concéntrica.