Pessoal, eu estou com uma difilculdade besta (mas bem chatinha), de indicar a posição em que um elemento (informado pelo usuário) se encontra no vetor.
segue abaixo o codigo:
importjava.util.*;publicclassEx2Binario{/** * @param args */publicstaticvoidmain(String[]args){intvet[];vet=newint[5];intelemento;Scannerinput=newScanner(System.in);for(inti=0;i<vet.length;i++){System.out.println(" Informe o elemento "+(i+1)+" para o array: ");vet[i]=input.nextInt();}System.out.println(" Informe um elemento para busca: ");elemento=input.nextInt();BuscaBinaria2.Binaria(elemento,vet);}}
publicclassBuscaBinaria2{publicstaticvoidBinaria(intx,intdados[]){intn=dados.length;intaux=0;for(inti=0;i<n-1;i++){for(intj=i+1;j<n;j++){if(dados[i]>dados[j]){aux=dados[j];dados[j]=dados[i];dados[i]=aux;}}}intmeio;intinicio=0;intfim=dados.length-1;while(inicio<=fim){meio=(inicio+fim)/2;if(x==dados[meio])System.out.println(" O elemento informado esta na posiçao "+meio);elseSystem.out.print(" O elemento informado nao foi achado ");if(x<dados[meio])fim=meio-1;elseinicio=meio+1;}}}
publicclassBuscaBinaria2{publicstaticvoidBinaria(intx,intdados[]){intn=dados.length;intaux=0;for(inti=0;i<n-1;i++){for(intj=i+1;j<n;j++){if(dados[i]>dados[j]){aux=dados[j];dados[j]=dados[i];dados[i]=aux;}}}intmeio;intinicio=0;intfim=dados.length-1;while(inicio<=fim){meio=(inicio+fim)/2;if(x==dados[meio]){System.out.println(" O elemento informado esta na posiçao "+(meio+1));break;}elseSystem.out.print(" O elemento informado nao foi achado ");if(x<dados[meio])fim=meio-1;elseinicio=meio+1;}}}
Flw
manolo
Olá Frantic!
Obrigado por estar sempre dando uma força.
Cara infelizmente da erro desta forma!
testei aqui e não funfa
Abrass
Frantic_Avenger
Que tipo de erro está ocorrendo?
manolo
Ele não encontra a posição correta, e as vezes informa que o numero não foi achado!
Ta meio dificil de resolver, to quebrando a cabeça aqui!
Abraço
Frantic_Avenger
Se for porque imprimiu que o número não é encontrado, é porque ele não foi encontrado naquele loop.
Nisso você pode usar um boolean e com relação a posição, eu somei + 1 na variável meio para retornar o número "exato".
publicclassBuscaBinaria2{publicstaticvoidBinaria(intx,intdados[]){intn=dados.length;intaux=0;for(inti=0;i<n-1;i++){for(intj=i+1;j<n;j++){if(dados[i]>dados[j]){aux=dados[j];dados[j]=dados[i];dados[i]=aux;}}}intmeio;intinicio=0;intfim=dados.length-1;booleanachou=false;while(inicio<=fim){meio=(inicio+fim)/2;if(x==dados[meio]){System.out.println(" O elemento informado esta na posiçao "+(meio+1));achou=true;break;}if(x<dados[meio])fim=meio-1;elseinicio=meio+1;}if(!achou)System.out.print(" O elemento informado nao foi achado ");}}
Vê se isso resolve. Flw
manolo
Cara, infelizmente nada ainda!
Olha a saida!
Informe o elemento 1 para o array:
658
Informe o elemento 2 para o array:
958
Informe o elemento 3 para o array:
4
Informe o elemento 4 para o array:
2
Informe o elemento 5 para o array:
97
Informe um elemento para busca:
958
O elemento informado esta na posiçao 5
Frantic_Avenger
O resultado não seria esse devido a ordenação que você faz, ficando os maiores números por último?
Flw.
manolo
Cara acho que descobri!!!
E que estou informando os elementos desordenadamente!
E depois ele ordena, e mostra o resultado ordenado
manolo
Opa.
auauhauhauhauhahauhaha
isso mesmo!
vc descobriu!
Frantic_Avenger
Já tinha reparado isso antes só que pensei que você também tivesse percebido, eu testando aqui e sempre indo certo e você falando que tava errado. :lol:
Flw
manolo
Frantic uma ultima ajuda! :oops:
Como eu posso informar que o elemento se encontra no meio do array?
if(x<dados[meio]){fim=meio-1;System.out.println(" O elemento esta na parte inferior do Array! ");}else{inicio=meio+1;System.out.println(" O elemento esta na parte superior do Array! ");}}if(!acho)System.out.print(" o elemento nao foi achado");
Frantic_Avenger
Assim:
if(x<dados[meio]){fim=meio-1;System.out.println(" O elemento esta na parte inferior do Array! ");}elseif(x>dados[meio]){inicio=meio+1;System.out.println(" O elemento esta na parte superior do Array! ");}elseif(x==dados[meio]){System.out.println(" O elemento esta no meio do Array! ");}}if(!acho)System.out.print(" o elemento nao foi achado");
Flw
manolo
Ixiii cara não funfo!
olha a saida!
Informe o elemento 1 para o array:
1
Informe o elemento 2 para o array:
2
Informe o elemento 3 para o array:
3
Informe o elemento 4 para o array:
4
Informe o elemento 5 para o array:
5
Informe um elemento para busca:
5
O elemento esta na parte superior do Array!
O elemento esta na parte superior do Array!
O elemento informado esta na posiçao 5
OBS: Lembrando que o vetor foi ordenado!
E quando tento acessar para aparecer o do meio, nenhuma mensagem e postada!
Obrigado
Frantic_Avenger
Deu certinho aqui (Obs.: esses if's são antes do break).
publicclassBuscaBinaria2{publicstaticvoidBinaria(intx,intdados[]){intn=dados.length;intaux=0;for(inti=0;i<n-1;i++){for(intj=i+1;j<n;j++){if(dados[i]>dados[j]){aux=dados[j];dados[j]=dados[i];dados[i]=aux;}}}intmeio;intinicio=0;intfim=dados.length-1;booleanachou=false;while(inicio<=fim){meio=(inicio+fim)/2;if(x<dados[meio]){fim=meio-1;System.out.println(" O elemento esta na parte inferior do Array! ");}elseif(x>dados[meio]){inicio=meio+1;System.out.println(" O elemento esta na parte superior do Array! ");}elseif(x==dados[meio]){System.out.println(" O elemento esta no meio do Array! ");System.out.println(" O elemento informado esta na posiçao "+(meio+1));achou=true;break;}}if(!achou)System.out.print(" O elemento informado nao foi achado ");}}
Vingdel
Veja se isso funciona e cumpre com a proposta do porgrama, afinal não segui seu raciocínio...
publicclassBuscaBinaria2{publicstaticvoidBinaria(intx,intdados[]){intn=dados.length;for(inti=0;i<n;i++){if(x==dados[i]){System.out.println("O elemento informado eh o item: "+(i+1)+"\n\nO elemento informado esta no indice: "+(i));break;}elseif(i==n-1){System.out.println("O elemento informado nao existe!!!");}}}}
Qualquer coisa grita. Abraço!
Vingdel
Perdeu o interesse pela solução?
manolo
Nossa cara, na verdade está tao desesperador meu cotidiano que to sem tempo para nada.
Mas, minha duvida já foi sanada. Obrigadão pela ajuda