Construtor e exceptions

3 respostas
T

Bom eu já entendi a teoria de exceptions, mas ainda nao sei direito como usar.
Fiz um pequeno exercicio de BMI,
e tentei adicionar exceptioons mas nao deu muito certo

O programa seria:

public class BMI {

public static void main(String [] args){
    
   Scanner input = new Scanner(System.in);
    
   String nome;
   double idade;
   double peso;
   double altura;
   
   
   System.out.print("Nome: ");
    nome = input.next();
   System.out.print("Idade: ");
    idade = input.nextDouble();
   System.out.print("Peso (kg): ");
    peso = input.nextDouble();
   System.out.print("Altura (cm): ");
    altura = input.nextDouble();
   
   Pessoa humano; 
    humano = new Pessoa(nome, idade, peso, altura);
   
   System.out.println("Nome: " + humano.getN() + " Idade:" + humano.getA() + " Peso (kg): " + humano.getPes() + " Altura (m): " + humano.getAlt());
   System.out.println("BMI: " + humano.conta());
   
   }
}</blockquote>

A classe Pessoa é:

<blockquote>class Pessoa {

protected String n;

protected double a;

protected double pes;

protected double alt;
public Pessoa(String nome, double idade, double peso, double altura){
    this.n = nome;
    this.a = idade;
    this.alt = altura / 100;
    this.pes = peso;
    
}

public String getN(){
    return n;
}

public double getA(){
    return a;
}
public double getPes(){
    return pes;
}
public double getAlt(){
    return alt;
}


double conta(){
double bmi = this.pes/(Math.pow((this.alt),2));
return bmi;
}

}

tentei adicionar exception da seguinte maneira

<blockquote>System.out.print("Peso: ");

try{

peso = input.nextDouble();

}

catch(java.util.InputMismatchException Ex){

System.out.println(“Invalido, tente novamente”);

peso = input.nextDouble();
}</blockquote>

mas de alguma forma nao funciona…
e outra pergunta, se quiser adicionar ainda o sexo da pessoa no exemplo, como faria para no resultado, se adicionar o nome da pessoa variar entre senh (se for homem) senhora (se for mulher)
exemplo
"Sexo (h/m): "

algum jeito mais simples q um switch/case

brigado
TintinST

3 Respostas

RodrigoKaos
Com relação a exception, não consegui usar com scanner tbm, vou ler a documentação, dar uma pesquisada, e tal.
double idade; 
		try{

			idade = Double.parseDouble(JOptionPane.showInputDialog("Insira a idade: "));
		
		}catch(NumberFormatException e){
			
			System.out.println("Valor invalido, insira novo valor");
			idade = Double.parseDouble(JOptionPane.showInputDialog("Insira a idade: "));
			
		}
Sobre o adicionar o pronome de tratamento deve existir muitas formas de fazer isso, a primeira que veio na minha mente foi criar um booleano e um if.
protected String nome;
protected boolean genero = false;

public String getNome() {	
		if(genero == true){
			return "Sra." + nome;
		}
		return "Sr." + nome;
	}
T
cheguei a achar um programa q funciona com scanner:
String inputString;

double inches;
System.out.print("Please enter height (in inches) ");
inputString = input.nextLine();

try
{
Double.parseDouble(inputString);
}

catch(NumberFormatException nfe)
{
System.out.println("Invalid inch value. Number must be a decimal.");
System.out.print("Re-enter height in inches: ");
inputString = input.nextLine();
}

mas o que achei curioso é q ele manda um String, e converte para um double e assim da certo.
por isso acho estranho ele nao funcionar com double e scanner direto se com string funciona..

com boolean eu até pensei, mas ai fiquei com problemas na hora de colocar isso no main..
por que quero colocar a opcao de apenas 2 letras (H/M) e ai nao vem em minha mente o código que posso fazer isso!

Grato desde já =)

EDIT:
cosegui fazer uma exception para números negativos
mas ainda nao consigo fazer um q pegue por exemplo se eu escrevo uma letra ao inves de um número

System.out.print("Idade:  ");
       idade = input.nextInt();
       if (idade <= 0)
           throw new Exception ("Número precisa ser positivo");
           }
       
       catch (NumberFormatException nfe){
           System.out.println("Número inválido, por favor tente novamente: ");
           idade = input.nextInt();
       }
       catch (Exception e){
           System.out.println(e.getMessage());
           System.out.print ("Escreva a idade novamente: ");
           idade = input.nextInt();

alguém tem uma ideia?

T

Resolvi grande parte dos problemas,
ainda resta uma dúvida.
Como posso fazer para definir o genero de uma pessoa?
Quero que tenha as opcoes h/m
só que seria bom se conseguisse jogar essa opcao no construtor

Criado 18 de maio de 2013
Ultima resposta 19 de mai. de 2013
Respostas 3
Participantes 2