Questão nº 60
Questão de Tecnologia da Informação · CESGRANRIO BASA 01/2021 (nº 60)
Considere a classe Java abaixo.
public class Main {
public static void main(String[] args) {
String s1="Brasil",s2="";
s2=geraString(s1, s2, 0);
System.out.println(s2);
}
public static String geraString(String s1, String s2, int cont) {
if(cont==s1.length())
return s2;
String vogal="aeiou";
char c=s1.charAt(s1.length()-cont-1);
if(vogal.indexOf(c) < 0)
s2+=Character.toString(c);
else
s2+=".";
cont++;
return geraString(s1, s2, cont);
}
}
O que o console exibirá quando o método main() for executado?
- A.i.a..
- B..a.i.
- Cl.s.rB (alternativa correta)
- DBr.s.l
- EBrasil
Resposta comentada
Gabarito Alternativa C
Conceito-chave: A recursão é uma função que chama a si mesma até atingir uma condição de parada. Aqui, a cada chamada, ela pega o caractere da posição invertida (do fim para o começo) de s1, e substitui vogais por . e consoantes pela própria letra, montando s2 de trás para frente.
- (A) Incorreta:
.i.a..seria o resultado se a string fosse percorrida do início para o fim (posiçãocontem vez des1.length()-cont-1), mas a função usa a posição invertida. - (B) Incorreta:
..a.i.também inverte a ordem de montagem, mas mantém a posição original; aqui a ordem correta é invertida (começa com a última letra de "Brasil"). - (C) Correta: A função começa com
cont=0, pegas1.charAt(5)=l(consoante), depoiss1.charAt(4)=i(vogal →.), depoiss1.charAt(3)=s(consoante), depoiss1.charAt(2)=r(consoante), depoiss1.charAt(1)=a(vogal →.), e por fims1.charAt(0)=B(consoante). Montando na ordem:l+.+s+r+.+B=l.s.rB. - (D) Incorreta:
Br.s.lseria o resultado se a string fosse percorrida do início para o fim (posiçãocont), mas com a lógica de vogais/consoantes correta; aqui a ordem está errada. - (E) Incorreta:
Brasilseria o resultado se não houvesse substituição de vogais por.e se a ordem não fosse invertida; a função altera ambos.
Armadilha do distrator mais tentador (B): A banca inverte a lógica de montagem, mas mantém a posição original. Quem não percebe que s1.length()-cont-1 começa no último caractere (índice 5) e vai até o primeiro (índice 0) cai na pegadinha, achando que a string é lida da esquerda para a direita.
Fonte: CESGRANRIO BASA 01/2021 Técnico Científico - Área de Formação: Tecnologia da Informação. Reproduzida para fins de estudo.