Enunciado
Deseja-se escrever um método Java que inverta a ordem dos caracteres existentes em um array recebido como parâmetro, conforme exemplificado na Figura a seguir. Esse método receberá como parâmetros o array a ser invertido e o índice do primeiro elemento do array, devendo funcionar com arrays de quaisquer comprimentos, inclusive com os de comprimentos iguais a zero. Qual método executa essa inversão da ordem dos caracteres de acordo com as especificações apresentadas?
Alternativas
- A)
public static void inverte(char [] vet, int i) { int m=vet.length / 2; if(i < m) return; inverte(vet, i+1); char aux=vet[i]; vet[i]=vet[vet.length - i - 1]; vet[vet.length - i - 1] = aux; }
- B)
public static void inverte(char [] vet, int i) { for ( ; i <= vet.length; i++) { char aux=vet[i]; vet[i]=vet[vet.length - i - 1]; vet[vet.length - i - 1] = aux; } }
- C)
public static void inverte(char [] vet, int i) { do { char aux=vet[i]; vet[i]=vet[vet.length - i - 1]; vet[vet.length - i - 1] = aux; i++; } while (i < vet.length); }
- D)
public static void inverte(char [] vet, int i) { int m=vet.length / 2; do { char aux=vet[i]; vet[i]=vet[vet.length - i - 1]; vet[vet.length - i - 1] = aux; i++; } while (i < m); }
- E)
public static void inverte(char [] vet, int i) { int m=vet.length / 2; if(i == m) return; char aux=vet[i]; vet[i]=vet[vet.length - i - 1]; vet[vet.length - i - 1] = aux; inverte(vet, i+1); }
Gabarito e comentário
Resposta correta: E
A alternativa E interrompe a recursão quando o índice i chega à metade do vetor e, antes de cada chamada seguinte, troca o elemento da posição i pelo elemento simétrico vet.length - i - 1. Assim, cada par é trocado uma única vez. Para vetor vazio, m vale zero e a condição i == m provoca retorno imediato, evitando acesso inválido ao array. As alternativas com do-while acessam o vetor antes de verificar a condição e podem falhar em vetores vazios. Alternativa E.