Uma opinião, por favor

3 respostas
A

Terminei hoje um exercício que um professor nos pediu na faculdade. Sei que ainda precisa melhorar um bocado, como por exemplo embutir um tratamento de exceções decente, etc... Fora isso, gostaria que quem puder dê uma olhada no geral e me diga se pra iniciante está de bom tamanho. Lá vai:

/*03/04/2004
 *Esta classe implementa a resolução do exercício proposto
 *onde o objetivo é procurar um valor dentro de um vetor
 *contendo números aleatórios,respondendo ao final da procura
 *se o valor foi encontrado ou não; depois ordenar este vetor
 *e procurar por outro valor, novamente fornecendo a resposta
 *de encontrado ou não. */
 
 import java.io.*;
 class Exercicio0604 {
 	
 	static int[] vetor = new int[50];
 	static int i;
 	static int j = 0;
 	static int z = 0;
 	static boolean encontrado;
 	
 	public static void main(String args[]) {
 		criaVetor();
 		System.out.println("Conjunto de 50 numeros inteiros aleatorios:");
 		mostra();
 		System.out.println();
 		procura(entrada("Forneca o valor de X:"),'l');
 		System.out.println();
 		ordena();
 		System.out.println("Conjunto ordenado:");
 		mostra();
 		System.out.println();
 		procura(entrada("Forneca o valor de Y:"),'b');
 		System.out.println();
 	}
 	//preenchendo o vetor com números aleatórios
 	public static void criaVetor() {
 		for (i=0;i<vetor.length;i++){
 			vetor[i] = (int)(Math.random()*100);
 		}
 	}
 	//exibindo o conteúdo do vetor
 	public static void mostra() {
 		for (i=0;i<vetor.length;i++){
 			System.out.print(vetor[i] + " ");
 		}
 		System.out.println();
 	}
 	//procurando um valor no vetor... 
 	public static void procura(int num,char tipo) {
		//...aqui, através do método de busca linear
 		if (tipo=='l'){
			encontrado = false;
			i = 0;
 			while (i<vetor.length && ! encontrado){
	 			if (num == vetor[i]){
	 				encontrado = true;
	 			}
	 			i++;
	 		}	
 		}
 		//...aqui, através do método de busca binária
 		else {
			encontrado = false;
			i = 0;
 			z = vetor.length;
 			while (i<z && ! encontrado){
				j = (i+z)/2;
				if (num==vetor[j]) {
					encontrado = true;	
				}
				else if(num<vetor[j]){
					z = j;
				}
				else{
					i = j+1;
				}
 			}
 		}
 		if (encontrado) {
 			System.out.println("O numero fornecido esta no vetor.");
 		}
 		else {
 			System.out.println("O numero fornecido nao esta no vetor.");
 		}
 	}
 	//solicitando ao usuário uma entrada de dados
 	public static int entrada(String frase){
 		System.out.print(frase);
 		int ent = 0;
 		try {
			BufferedReader e = new BufferedReader(new InputStreamReader(System.in)); 
	 		ent = Integer.parseInt(e.readLine());
 		}
 		catch (IOException e) {
 			System.out.println("Erro na entrada de dados");
 		}
		return(ent);
 	}
 	//ordenando o vetor através do método de inserção direta
 	public static void ordena() {
 		for (i=vetor.length-1;i>0;i--) {
 			z = vetor[i-1];
 			j = i;
 			while (j<vetor.length && z>vetor[j]) {
 				vetor[j-1] = vetor[j];
 				j++;
 			}
 			vetor[j-1] = z;
  		}
 	}
 }

[color="red"]Editado para conter BBCode por JuJo[/color]

3 Respostas

W

Pra iniciante tá muito bom, mas preste atenção no seguinte método:

public static void procura(int num,char tipo) {
    //...aqui, através do método de busca linear

    if (tipo=='l'){
        encontrado = false;
        i = 0;
        while (i<vetor.length && ! encontrado){
            if (num == vetor[i]){
                encontrado = true;
            }
            i++;
        }
    }
    //...aqui, através do método de busca binária
    else {
        encontrado = false;
        i = 0;
        z = vetor.length;
        while (i<z && ! encontrado){
            j = (i+z)/2;
            if (num==vetor[j]) {
               encontrado = true;
            }
            else if(num<vetor[j]){
                 z = j;
            }
            else{
                 i = j+1;
            }
        }
    }
    if (encontrado) {
        System.out.println("O numero fornecido esta no vetor.");
    }
    else {
        System.out.println("O numero fornecido nao esta no vetor.");
    }
}

O que o enunciado pede é que vc pesquise e diga se encontrou ou não, certo? Então vc poderia ao invés de utilizar o método public static void procura(int num,char tipo) , poderia utilizar-lo assim: public static boolean procura(int num,char tipo); assim vc estaria indicando que encontrou e no próprio método public static void main( String args[] ) exibiria as mensagens que vc exibe no final de public static boolean procura( int num, char tipo ).

Sugestão:
Deixe a variável static boolean encontrado dentro do método public static boolean procura(int num,char tipo) como segue abaixo:

public static boolean procura(int num,char tipo) {
    //...aqui, através do método de busca linear
    boolean encontrado = false;
    if (tipo=='l'){
        encontrado = false;
        i = 0;
        while (i<vetor.length && ! encontrado){
            if (num == vetor[i]){
                encontrado = true;
            }
            i++;
        }
    }
    //...aqui, através do método de busca binária
    else {
        encontrado = false;
        i = 0;
        z = vetor.length;
        while (i<z && ! encontrado){
            j = (i+z)/2;
            if (num==vetor[j]) {
               encontrado = true;
            }
            else if(num<vetor[j]){
                 z = j;
            }
            else{
                 i = j+1;
            }
        }
    }
    
    return encontrado;
}

e em public static void main( String args[] )

.
    .
    .
    if (  procura(entrada("Forneca o valor de X:"),'l')) {
        System.out.println("O numero fornecido esta no vetor.");
    }
    else {
        System.out.println("O numero fornecido nao esta no vetor.");
    }
    .
    .
    .

Creio que isso vai dar um requinte ao seu programa e vai torna-lo mais profissional ainda…
:wink:

F

as variaves i, j e z nao precisao ser variaveis globais… bote elas como variaveis locais nos metodos q as usam… isso economiza memoria…

uma observacao no tratamento nas excecoes, nessa parte:

public static int entrada(String frase){ 
      System.out.print(frase); 
      int ent = 0; 
      try { 
         BufferedReader e = new BufferedReader(new InputStreamReader(System.in)); 
          ent = Integer.parseInt(e.readLine()); 
      } 
      catch (IOException e) { 
         System.out.println("Erro na entrada de dados"); 
      } 
      return(ent); 
   }

coloque tb um tratamento pra NumberFormatException, q eh disparada se o usuario digitar uma string q n corresponde a um numero…

A

Valeu, colegas! Vou procurar seguir os conselhos. Obrigado mesmo!!!

Criado 4 de abril de 2004
Ultima resposta 5 de abr. de 2004
Respostas 3
Participantes 3