/*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.*/
[code]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());
}
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 JonathanDCC/IM/UFRJ (rev. maio de 2010).
[quote=Carlos_ds_jar]String s = e.getMessage(); // Pega o string e exibe onde vc quiser...
[/quote]
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.