Dúvida quanto a utilização de exceções e como mostra-las na tela...?

3 respostas
diegohsi

/*Boa noite pessoal... A minha dúvida assola as minhas noites de sono (rs). Nao consigo assimilar as exceções em java. Estou com
* duvida onde eu coloco os tratamentos, se é npo método ou no main e assim vai, nao se preocupem em me falar as regras de java pois
* estou seguindo o livro scjp 6. SO não sei onde colocar os tratamentos, como faço pra lançar uma exceção na tela pra eu ver... Segue
* o exercicio do livro e tentei resolver mais acho que não esta correto.
*
* Propagando e capiturando exceções
*
* Neste exercicio tentaremos criar dois métodos que lidarão com exceções. Um deles é o método main(), que chamará outro método. Se uma
* exceção for lançada no outro método, ele terá que manipula-la. Uma instrução FINALLY será incluida para indicar que tudo foi concluído.
* O método chamado será denominado reverse(), e inverterá a ordem dos caracteres da string. Se a string não tiver caractéres, ele propagará
* uma exceção até o método main().
* 1 - Crie uma classe chamada Propagate e um método main(), que permanecerá vazio por enquanto
* 2 - Crie um método chamado reverse(). Ele usará como argumento e retornará uma String
* 3 - Em reverse(), verifique se a string tem um comprimento igual a 0 usando o método String.lenth(). Se o comprimento for igual a 0 (zero)
* ele lançará uma exceção.
* 4 - Agora no método main tentaremos chamar esse método e manipular qualquer exceção em potencial. Além disso, incluíremos uma instrução FINALLY
* que nos informará que a exceção foi concluída.*/

import java.util.*;
public class Propagate {

	private String name;
	
	
	String reverse(String s) {
		String str = "";
		try {
			for(int t = s.length() - 1; t > 0; t--) { // t recebe o tamanho de s(argumento). Se o tamanho for maior ou iqual a 0
				str += s.charAt(t);					  // str recebe a ultima letra da string s e assim por diante ate a primiera letra
			}										  // += faz o autoboxing apontando para a nova referencia assim a variável str recebe os char(t)
		} catch (Exception e) {
			e.printStackTrace();	// Retorna o mapa de propagação da pilha
		}
		return str;
	}
	
	
	public String getName() {
		return name;
	}
	

	public void setName(String name) {
		this.name = name;
	}
	

	public static void main(String[] args) {
		Scanner s = new Scanner(System.in);
		Propagate p = new Propagate();
		
		System.out.print("Insira seu nome: ");
		p.setName(s.nextLine());
		p.reverse(p.getName());
	}
}

3 Respostas

Carlos_ds_jar

String s = e.getMessage(); // Pega o string e exibe onde vc quiser...

FacaNaCaveira

Fala ai diegohsi, blz cara?? espero que suas noites de sono sejam mais tranquilas :lol:
Eu peguei o seu codigo e fiz umas modificações que de repente pode te ajudar, acredito que essa seja a melhor maneira de fazer o exercicio proposto, caso não seja solicito a ajuda dos colegas do forum.

import java.util.*;

public class Propagate {
    private String name;
    public String reverse(String s) throws Exception {
        //Usei o throws Exception no metodo para tratar isso so na Main
        String str = "";

        if (s.trim().length() != 0) {//Coloquei o trim() para remover qualquer espaço
            for (int t = s.length() - 1; t >= 0; t--) {
                //adicionei o '=' em  t >= 0 pois estava comendo a primeira letra
                str += s.charAt(t);			
            }
        }else{
            //Aki criei uma Exception caso o comprimento do String seja vazio
            throw new Exception();
        }
        return str;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        Propagate p = new Propagate();
        //Utilizei o Try Catch para capturar a exceção na Main()
        try {
            System.out.print("Insira seu nome: ");
            p.setName(s.nextLine());
            System.out.println(p.reverse(p.getName()));
        } catch (Exception e) {//Ele entra aki caso o nome digitado seja em Branco
            System.out.println(e.getMessage());
            e.printStackTrace();
        }finally{//O finally ele executa com ou sem exceção, esse bloco sempre é executado
            System.out.println("A exceção foi concluída");
        }
    }
}

Aproveitei para pesquisar a sua duvida e achei um artigo interessante em http://www.dcc.ufrj.br/~comp2/TextosJava/Excecoes%20em%20Java.pdf chamado Resumo dos conceitos e regras gerais do uso de exceções em Java de autoria de Miguel Jonathan DCC/IM/UFRJ (rev. maio de 2010).

Abração 8)
Max

nel

Carlos_ds_jar:
String s = e.getMessage(); // Pega o string e exibe onde vc quiser...

Você está de brincadeira, não é?
Se manipular Exceção fosse algo tão simples, seriamos todos mais felizes.

A questão maior é a manipulação de uma determinada exceção e não simplesmente “imprimir” sua stackTrace() e/ou mensagem de erro.
Diego, tem um artigo do Sérgio Taborda que aborda justamente a questão de Exceções, achei um ótimo artigo e lhe recomendo a leitura dele.

São três artigos, sendo eles: Exceções: Conceitos: http://sergiotaborda.wordpress.com/desenvolvimento-de-software/java/trabalhando-com-excecoes-conceitos/
Exceções: Classes Utilitárias: http://sergiotaborda.wordpress.com/desenvolvimento-de-software/java/excecoes-classes-utilitarias/
Exceções: Boas Práticas, Más Práticas: http://sergiotaborda.wordpress.com/desenvolvimento-de-software/java/excecoes-boas-praticas-mas-praticas/

Vão lhe ajudar muito.
Abraços.

Criado 2 de agosto de 2010
Ultima resposta 6 de ago. de 2010
Respostas 3
Participantes 4