exercício

4 respostas
K
pessoal alguem poderiame ajudar com esse exercício: Escreva um programa em Java que tenha as seguintes características:

a. Leia 10 valores inteiros digitados pelo usuários e armazene em um

vetor (fiz)

b. Tenha um método chamado imprime() que imprime todos os

elementos do vetor (fiz)

c. Tenha um método chamado busca(int valor) que retorne a posição de

valor no vetor ou -1 caso valor não exista no vetor.(fiz)

d. Tenha um método chamado remove(int valor) que remove o elemento

valor

e. Tenha um método chamado bolha() que ordene os valores do vetor

utilizando o método bolha (fiz)

f. Tenha um método chamado buscaBinária(int valor) que, utilizando o

método de busca binária,. retorne true se o elemento valor pertence

ao vetor e false, caso contrário

Falta a letra d e a letra f .

import javax.swing.JOptionPane;

public class Exe3 {

int[] vetor = new int[10];

/**
 * @param args
 */
public static void main(String[] args) {
	Exe3 e = new Exe3();
	e.lerValores();
	e.imprimir();
	e.ordenarBolha();
}

public void lerValores() {
	for (int i =0;i<vetor.length;i++){
		String valor = JOptionPane.showInputDialog("Digite um valor inteiro:");
		vetor[i] = Integer.parseInt(valor);
	}
}

public void imprimir() {
	String valores = "";
	for (int i =0;i<vetor.length;i++){
		valores += 	vetor[i] + ",";
	}
	JOptionPane.showMessageDialog(null, "Os valores são:"+valores);
}

public void ordenarBolha(){
	for (int i=vetor.length-1;i>1;i--){
		for (int j =0;j<i;j++){
			if (vetor[j]>vetor[j+1]) {
				trocar(j,j+1);
			}
		}
	}
}

public void trocar(int posA, int posB) {
	int aux = vetor[posA];
	vetor[posA] = vetor[posB];
	vetor[posB] = aux;	
}

}

4 Respostas

Marky.Vasconcelos

Você pode ter um método que compare todos os objetos do vetor e se for igual, seteo null

vetor[pos] = null;

Mas para imprimir depois provavelemnte você teria um NullPointerException
Para evitar você pode repassar a lista e adicionar em uma outra apenas osque os valores não forem null, mas após 10 remoções o vetor nãovai ter posições

Eu nunca entendi buscaBinária =/

PS:Só pra lembrar nós do GUJ, não fazemos e somos contra quem faz o trabalho dos outros, poste dúvidas não códigos prontos.
E bem vindo ao fórum.

danielbussade
vetor[pos] = null;

Olá o null daria tipo incompativel, já que o vetor dele eh de inteiro!
Segue em abaixo os dois metodos restantes:

//metodo remove
		public boolean remove(int num){
			int pos=0;
			while(num !=vetor[pos])
				pos++;
			if( pos ==9 ){
				return false;
			}
			else {
				for(;pos<9;pos++){
					vetor[pos]=vetor[pos + 1];
				}
				vetor[pos]=0; //ultimo elemento recebe 0
				return true;	
			}
		}
		
		//busca binária
		public int buscaBinaria(int[] array, int valor) {
	        if(valor == array[0]) {
	                return 0;
	        } else if(valor == array[array.length-1]) {
	                return array.length - 1;
	        } else {
	                int esq = 0;
	                int dir = array.length - 1;
	                int valorMeio;
	                while(esq <= dir) {
	                        valorMeio = (esq + dir) / 2;
	                        if(array[valorMeio] == valor) {
	                                return valorMeio;
	                        } if(array[valorMeio] < valor) {
	                                esq = valorMeio + 1;
	                        } else if(array[valorMeio] > valor) {
	                                dir = valorMeio - 1;
	                        }
	                }
	                return -1;
	        }
              }

Att

ViniGodoy

Oi! Sempre que postar códigos, use a tag code. Se tem dúvide de como usar esse recurso clique aqui:
http://www.guj.com.br/posts/list/50115.java

Para fazer a busca binária você precisa:

  1. De um índice que aponta para o primeiro elemento considerado;
  2. De um índice que aponta para o último elemento considerado;
  3. E de um índice que aponte para o meio do espaço considerado (primeiro + ultimo) / 2.

Então, teste se o elemento do meio é o elemento que você quer. Se for, ótimo, o algoritmo acabou e você acaba de achar o índice de seu elemento.

Se não for, existem duas possibilidades:

  1. Esse elemento é menor do que o que você está procurando. Bem, você tem um vetor ordenado, certo? Então, se o elemento do meio é menor do que o que você procura, o que você pode dizer sobre todos os elementos que estão antes dele? Que são menores também. Então simplesmente descarte-os. Para isso, diga que o novo início da sua busca é igual a posição do elemento do meio + 1.
  2. Esse elemento é maior do que o que você procura. Se ele é maior, então todos os que vem depois dele também são. Afinal, sua lista é ordenada. Nesse caso, descarte todos os maiores. Para isso, faça com que o ponteiro do final valha o elemento do meio-1.

E agora? Basta recalcular o novo meio. Continue fazendo isso até achar o elemento ou até que o índice do final seja igual ao início e esse elemento não seja válido também (caso onde você não encontrou nada).

_Renatu

Só uma observação. A busca binária precisa ser feita numa coleção ordenada. Se o seu array nao estiver ordenado, de nada adianta o algoritmo.

Criado 14 de novembro de 2007
Ultima resposta 15 de nov. de 2007
Respostas 4
Participantes 5