Corrija o código: Não altere o array
Sua amiga está tentando escrever um método que realize as seguintes transformações:
int[] x = new int[]{3, 3, 3, 3, 3, 3, 3};
// Sempre que x for passado, os seguintes resultados deverão ser retornados:
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}O método change() não deve alterar o array original. Após cada chamada, o valor original de x ainda deve ser igual a new int[]{3, 3, 3, 3, 3, 3, 3}.
Ela cria o seguinte 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;
}Ops! O código parece alterar o array original. Corrija esse código incorreto para que o método não altere mais o array original.
Exemplos
int[] x = new int[]{3, 3, 3, 3, 3, 3, 3};
// O 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}
// O que o código com erro produz:
Program.change(x, 2) ➞ new int[]{3, 2, 1, 1, 1, 2, 3} // Até aqui, tudo bem...
Program.change(x, 2) ➞ new int[]{3, 1, -1, -1, -1, 1, 3} // O array foi alterado :(Notas
- Se isso parecer confuso, copie e cole o código incorreto em um REPL de Java e faça alguns testes para entender o que o método está fazendo.
- Dica: Tente criar uma cópia do array de entrada.
- Se isso parecer familiar, é porque faz parte de uma solução para o problema Tapete concêntrico.