Deseja-se realizar uma busca sobre um vetor não ordenado de ...
Deseja-se realizar uma busca sobre um vetor não ordenado de inteiros. Para tal, deve-se criar um método Java que receba como parâmetros o vetor em questão e um número inteiro (elemento) que se deseja procurar no vetor, além de outros parâmetros que se julgarem necessários. Essa função deve retornar
• o índice do elemento no vetor, caso ele seja encontrado;
• o inteiro -1, caso o elemento não seja encontrado.
Assumindo-se que todos os pacotes necessários foram devidamente importados, qual método Java irá realizar corretamente essa busca?
Quem não tem acesso: - -> D
copyOf(int[] original, int newLength)- Copies the specified array, truncating or padding with zeros (if necessary) so the copy has the specified length.
https://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html
função recursiva da uma bugada na cabeça kkkk
Porque a b) não é a certa?
A b) não é a certa porque ela retorna -1 se o número buscado for menor que o número iterado
Prova para Escriturário programar, é isso?!
Pedro,
O BB tem vaga para escriturário comercial e de TI.
Este simulado, provavelmente é para escriturário de TI que não é o meu caso.
https://www.youtube.com/watch?v=HhZp-o8XZ3w neste link tem a explicação da questão
A letra D é uma função recursiva que compara o elemento buscado com a última posição do vetor. Se o elemento não corresponder a essa última posição do vetor, a função se chama novamente removendo esse último elemento do vetor e repete o processo de remover a última posição do vetor até que o elemento seja encontrado ou até que o vetor fique vazio, o que significa que o elemento não foi encontrado após percorrer todo o vetor e a função retorna -1.
a B está errada por que no condicional else interno diz que caso o elemento for menor retorne -1 e o examinado pede que retorne -1 apenas se o elemento nao for encontrado
A questão fala que o vetor de inteiros não é ordenado.
Então a gente já elimina as alternativas que tentam fazer alguma comparação para saber se o número é maior ou menor que outro número do vetor, porque não tem ordem. Pode ser um array assim [32,3,54,15,66,1].
Na alternativa A tem um trecho
else
if (elem > vet[m])
return busca(vet, elem, m + 1, fim);
Perceba que está inferindo que o próximo número do vetor (depois do vet[m]) teria chance de ser o número escolhido porque o vet[m] é menor que o elem. Isso não vai dar certo porque o vetor não é ordenado. ERRADA
Na alternativa B
if(elem < vet[i])
return -1;
Perceba que está inferindo que o próximo número do vetor (depois do vet[i]) não teria chance de ser o número escolhido porque o vet[i] é maior que o elem. Isso não vai dar certo porque o vetor não é ordenado. ERRADA
Na alternativa C
if (elem > vet[m])
ini = m + 1;
else
fim = m - 1;
Perceba que está inferindo que o elem estaria antes ou depois do vet [m] comparando-o pelo elem>vet[m]. Isso não vai dar certo porque o vetor não é ordenado. ERRADA
Na alternativa E
if(elem > vet[vet.length-1])
return -1;
Perceba que está inferindo que o próximo número do vetor (depois do vet[vet.length-1]) não teria chance de ser o número escolhido porque o vet[vet.length-1] é maior que o elem. Isso não vai dar certo porque o vetor não é ordenado. ERRADA
Na alternativa D
public static int busca(int vet[ ],int elem) {
if(vet.length==0)
return -1;
if(elem==vet[vet.length-1])
return vet.length-1;
return busca(Arrays.copyOf(vet,vet.length-1),elem);
}
Temos tudo certo. Se não tiver elemento no vetor já retorna o -1. Se tiver ele faz uma busca sequencial. Vai um por um até descobrir usando a função recursiva (chama a função denovo). Basicamente pergunta se o ultimo elemento do vetor é o número escolhido, se não for ele chama a função denovo com -1 elemento (se tinha 5 agora tem 4). Ai pergunta denovo até chegar no elemento (Ai retorna o elemento como está na função) ou até chegar num vetor sem nada que vai automaticamente retornar -1 (ta na função)
Bons estudos