Jump to content
ssofia

try/catch

Recommended Posts

ssofia

  import java.io.*;

  public class ConvInt2 {
     public String leLinha() {
         byte[] tB = new byte[20];
         try {
             System.in.read(tB);
         }
         catch (IOException e) {
             System.err.println(e);
        }
        String tS = new String(tB).trim();
        return tS;
    }
     
    public int leInt() {
        String s = leLinha();
        return Integer.parseInt(s);
    }
     
    public static void main(String[] args) {
        ConvInt2 ci = new ConvInt2();
        System.out.print("Entre inteiro: ");
        int valor = ci.leInt();
        System.out.println("Valor lido foi: " + valor); 
    }
}

Desculpem chatear mais uma vez....Apos ter lido o que era ciclo try/catch não fiquei esclarecida....E nao consigo perceber muito bem este codigo(exercicio)....

Se alguem me pdr ajudar agradecia.

Obrigado

Share this post


Link to post
Share on other sites
Knitter

http://wiki.portugal-a-programar.org/java:tutorial:11_excepcoes

http://download.oracle.com/javase/tutorial/essential/exceptions/index.html

O bloco try/catch permite lidar com excepções. De forma simples, dentro da secção try coloca-se o código onde podem ocorrer excepções. Estas excepções são originadas por métodos que na sua declaração lançam excepções em situações de erro. Dentro do catch coloca-se a excepção que se pretende apanhar e a forma como se pretende tratar o erro.

Nesse exemplo estamos a tentar ler informação usando o método System.in.read, se esse método falhar é lançada uma excepção do tipo IOException. No catch estamos a dizer que excepção é que vamos apanhar (IOException), o nome da variável pela qual a iremos conhecer (e) e o código que iremos fazer se o erro ocorrer, que nesse caso é apenas mostrar o texto na consola através do System.err.println.

Share this post


Link to post
Share on other sites
Dan_111

Boas,

eu estou a pensar utilizar algo parecido ao codigo de cima para impedir que o meu programa rebente. É o seguinte, basicamente tenho um interpretador de comandos, num comando ele recebe uma string depois um double. Se eu inserir 1º o double na consola o programa rebenta, eu gostava de saber como contornar este problema, para que sempre que introduzi-se 1º o double desse uma mensagem de erro em vez de rebentar.

Desde ja muito obrigado

Share this post


Link to post
Share on other sites
Knitter

Isso irá depender muito de como estás a fazer as validações, que neste caso parece não estar a acontecer. As excepções servem para recuperar de erros que o programador não consegue prever ou controlar mas no caso que indicas acho que uma simples verificação do tipo de dados contido nas variáveis serve.

Share this post


Link to post
Share on other sites
Baderous

Para o caso de o utilizador inserir 1º o double, para verificar se é ou não double tens de fazer parsing à mão ou usando uma expressão regular, porque como estás a ler para uma string, qualquer coisa entra sem erros. Agora para o caso do double é que podes usar o try/catch para o caso aquilo do input do utilizador não ser um double. Suponho que estejas a usar a classe Scanner para leitura do input. Nesse caso, essa classe lança a excepção InputMismatchException no método nextDouble().

public class Cenas {
        public static void main(String[] args) {
                Double dbl = null;
                Scanner input = new Scanner(System.in);
                while (dbl==null) {
                        System.out.println("Introduza o double: ");
                        try {
                                dbl = input.nextDouble();
                        } catch (InputMismatchException e) {
                                System.out.println("Formato incorrecto.");
                                input.nextLine();
                        }
                }
                System.out.println("Double inserido: " + dbl);
        }
}

Introduza o double: 
sdf
Formato incorrecto.
Introduza o double: 
gdfg
Formato incorrecto.
Introduza o double: 
2.3
Double inserido: 2.3

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.