Tratar Exceção lançada dentro do bloco catch

2 respostas
G

Saudações Pessoal! Escrevi duas classes básicas de teste para estudar exceção. Estou forçando a barra para a exceção ser lançada pelo construtor e, em seguida, ser capturada na main. O tratamento infoma ao usuário para digitar novamente. No entanto, existe a possibilidade do usuário repetir a entrada com valor vazio . Como tratar a exceção lançada dentro do trecho catch e mostrar, mais uma vez para o usuário, que ele continua errando, sem exibir o stackTrace?

//Uma classe de Exceção

public class EmptyStringException extends IllegalArgumentException{

EmptyStringException(){

super(O parâmetro não pode ser vazio);

}

}

//E uma classe de teste

public class A {

String str;

A(String s){

if( s.trim().equals("") ){

throw new EmptyStringException();

}

this.str = s;

}
public static void main(String[] args) {
     A a;
     try{
        a = new A("");
     }catch(IllegalArgumentException e){
        System.out.println("Erro. Digite novamente!");
        Scanner s = new Scanner(System.in);
        a = new A(s.nextLine());
     }
     System.out.println("teste");
  }

}

2 Respostas

H

Então, o meu professor de java me passou um ensinamento bastante interessante
nessa área de tratar exceções...
Você ou pode pedir licença e passar, ou simplesmente passar e depois pedir desculpa....
Ou seja há várias formas de lidar com exceções, a primeira seria evitar com que elas aconteçam , se certificando que os dados
são corretos, ou tratar elas no bloco catch...

Aqui em baixo um exemplo do modo pedir licença antes de passar....
import java.util.Scanner;

/**
 *
 * @author hnagamachi
 */
public class OutraPossibilidade {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        String string="";
        Scanner scanner = new Scanner(System.in);
        string = scanner.nextLine();
        while(string.equals("")){
            System.out.println("A string nao pode ser vazia!");
            string = scanner.nextLine();
        }
    }

}

aa, quando for postar código , use a tag code , assim facilita para quem for tentar te ajudar
fazer do jeito que você quer... bom, acho que só colocando um while dentro do bloco de catch, que nem eu fiz....

public class A {
    String str;

    A(String s) {
        if (s.trim().equals("")) {
            throw new EmptyStringException();
        }
        this.str = s;
    }

    public static void main(String[] args) {
        A a;
        try {
            a = new A("");
        } catch (IllegalArgumentException e) {
            String entrada="";
            while(entrada.equals("")){
                System.out.println("Erro. Digite novamente!");
                Scanner s = new Scanner(System.in);
                entrada = s.nextLine();
           }
// Se saiu do laço é porque agora está ok, podemos prosseguir
           a = new A(entrada);
        }
        System.out.println("teste");
    }
}

aqui agora estamos fazendo uma mistura de pedir licença, com pedir desculpas, acho que para tratar usuários teimosos não dá para ir só com o jeito "pedir desculpas"

peczenyj

Pessima forma de trabalhar com entrada de usuarios.

Se deu um erro, vc deve ver por fora, tipo um loop

do{
try{

ler-dados-usuario

} catch (…) {

tratamento de erros

}
}while(nao-tem-erro);

Criado 29 de julho de 2008
Ultima resposta 29 de jul. de 2008
Respostas 2
Participantes 3