Problema com método

olá estou fazendo um aplicativo na facul para calcular IMC, mas tenho q chamar metodos dentro de outros metodos, e o metodo showMenu() está dando erro na linda q lê a opção e quando eu chamo ele no main(); alguem poderia me ajudar… obrigado a todos…

[code]
package POOexer02;

import java.util.Scanner;
import POOexer02.Pessoa;
import POOexer02.IMC;

public class Ativ02 {

private static Scanner novo;

private Pessoa lerDadosPessoa(){
	
	 Pessoa pessoa = new Pessoa();
	 
	 String nome = null;
	 int idade;
	 double peso;
	 double altura;
	  
	 System.out.println("\nNome");
	 nome=novo.nextLine();
	 System.out.println("Idade");
	 idade = Integer.parseInt(novo.nextLine());				  
	 System.out.println("Peso");
	 peso=novo.nextDouble();
	 System.out.println("Altura");
	 altura=novo.nextDouble();
	  
	 pessoa.setNome(nome);
	 pessoa.setIdade(idade);
	 pessoa.setPeso(peso);
	 pessoa.setAltura(altura);	  
	 return pessoa;
}

public void determinarClassificacaoIMC(IMC i){
	double imc = 0;
	i.getClassificacaoIMC(imc);
	
}

public static void showMenu(){
	
	IMC i = new IMC();
	Ativ02 atv = new Ativ02();
	
	novo = new Scanner (System.in);
	
	Integer escolha;
	
	do{
  		  
		  System.out.println("\n 1-Calcular IMC");
		  System.out.println(" 2-Sair");
		  escolha= Integer.parseInt(novo.nextLine());
		  
		  switch(escolha){
		  
		  case 1:{
			  
			  atv.lerDadosPessoa();
			  double altura = 0, peso = 0;
			  i.calIMC(altura, peso);
			  atv.determinarClassificacaoIMC(i);
				  
			  break;
		  }
		  case 2:{
			  System.out.println("Saindo...");
			  break;
		  }	
	 }
		  
	}while(escolha!=2);
	

}

public static void main(String[] args){
	showMenu();
	
}

}[/code]

tenho mais duas classes, se precisar eu mando… :slight_smile:

“Está dando erro” não é resposta. Que erro está ocorrendo?

eu consigo ler a opção, mas dai aparece…

Exception in thread “main” java.lang.NumberFormatException: For input string: “”
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at POOexer02.Ativ02.showMenu(Ativ02.java:56)
at POOexer02.Ativ02.main(Ativ02.java:81)

Coloca ai o erro, senão da até desânimo analisar. [color=red]EDIT demorei editando a msg e vc colocou o erro [/color]

Tá funfando aqui.

[code]
import java.util.Scanner;

public class Teste {
public static Scanner novo;

public static void showMenu() {
	novo = new Scanner(System.in);
	Integer escolha;
	do {
		System.out.println("\n 1-Calcular IMC");
		System.out.println(" 2-Sair");
		escolha = Integer.parseInt(novo.nextLine());

		switch (escolha) {
		case 1:
			System.out.println("Opção 1");
			break;
		case 2:
			System.out.println("Opção 2.  Saindo...");
			break;
		}
	} while (escolha != 2);
}

public static void main(String[] args) {
	showMenu();
}

}[/code]

Melhora o nome das variaveis, colocar “novo” para o Scanner não achei legal … :S hehehehe

[quote=Rafa2012]eu consigo ler a opção, mas dai aparece…

Exception in thread “main” java.lang.NumberFormatException: For input string: “”
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at POOexer02.Ativ02.showMenu(Ativ02.java:56)
at POOexer02.Ativ02.main(Ativ02.java:81)[/quote]

For input string: “” … você não está digitando o valor 1 ou 2??? Tá parecendo isso pois a entrada está “” por isso o NumberFormatException.

hehe… vou mudar, mas o problema é o seguinte, quando eu clicar a opção 1, tenho q adicionar a pessoa, calcular o imc, e mostrar a classificação, que estão em outras classes…
eu posso fazer isso dentro do showMenu()?

estou digitando 1 ou 2, pq da esse erro?

[quote=Rafa2012]hehe… vou mudar, mas o problema é o seguinte, quando eu clicar a opção 1, tenho q adicionar a pessoa, calcular o imc, e mostrar a classificação, que estão em outras classes…
eu posso fazer isso dentro do showMenu()? [/quote]

Sim pode.

Roda o código que postei(Baseado no seu) e vê se acontece e mesmo erro.
Como você está executando? É via IDE ou direto no prompt?

como faço pra resolver esse erro amigo?

via IDE, vou tentar aki…

assim dá certo, o meu tb deu, mas quando instanciei o objeto e chamei os metodos dentro do case 1: apareceu o erro…

deu o mesmo erro amigo, eu criei um objeto atv do tipo Ativ02, e chamei o metodo atv.lerDadosPessoa(); ae aparece o mesmo erro…

Tá facil Rafa, vamos por partes:
1º - No seu case 1 tem "atv.lerDadosPessoa(); " esse metodo tem return tipo “Pessoa”, onde vc esta armazenando o resultado?
Posta ai as outras 2 classes.

package POOexer02;

public class Pessoa {
	
	private String nome;
	private int idade;
	private double peso;
	private double altura;
	
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public int getIdade() {
		return idade;
	}
	public void setIdade(int idade) {
		this.idade = idade;
	}
	public double getPeso() {
		return peso;
	}
	public void setPeso(double peso) {
		this.peso = peso;
	}
	public double getAltura() {
		return altura;
	}
	public void setAltura(double altura) {
		this.altura = altura;
	}
	
	protected void finalize(){
		System.out.println (" Objeto destruído pelo garbagecollection");
		}
}
package POOexer02;

public class IMC {
	
	private static IMC instancia;
	
	public IMC(){
		
	}
	
	public static IMC newInstance(){
		
		if(instancia == null)
			instancia = new IMC();
		
			return instancia;
	}
	
	public double calIMC(double altura, double peso){
		
        double imc;
	    imc = peso / ((altura)* (altura));
	    System.out.printf ("\n\n O Seu IMC é : %3.1f!!!", imc);
	    return imc;
		
	}
	
	public String getClassificacaoIMC(double imc){
		
		if (imc < 17){			
		 return ("\n Muito Abaixo do Peso!!!");
		}
		
		else if ( imc < 18.50){			
			return ("\n Abaixo do Peso!!!");
		}
		
        else if ( imc < 25.0){			
			return ("\n Peso Normal!!!");
		}
		
        else if ( imc < 30.0){			
			return ("\n Acima do Peso!!!");
		}
		
        else if ( imc < 35.0){			
			return ("\n Obesidade I!!!");
		}
		
        else if (imc < 40.0){			
			return ("\n Obesidade II (Severa)!!!!!!");
		}
		
        else 
		return ("\n Obesidade III (Mórbida)!!!!!!");		
	}
}

tah ae amigo…

Da uma olhadinha ai, tentei alterar o minimo possivel seu código. Senão ia dar mais trabalho pra vc entender.
Use membros estáticos quando realmente necessários, removi um metodo.

import java.util.Scanner;

public class Ativ02 {
	private static Scanner novo;

	public Pessoa lerDadosPessoa() {

		Pessoa pessoa = new Pessoa();

		String nome = null;
		int idade;
		double peso;
		double altura;

		System.out.println("\nNome");
		nome = novo.next();
		System.out.println("Idade");
		idade = Integer.parseInt(novo.next());
		System.out.println("Peso");
		peso = novo.nextDouble();
		System.out.println("Altura");
		altura = novo.nextDouble();

		pessoa.setNome(nome);
		pessoa.setIdade(idade);
		pessoa.setPeso(peso);
		pessoa.setAltura(altura);
		return pessoa;
	}

	public void showMenu() {

		IMC i = new IMC();
		Ativ02 atv = new Ativ02();
		Pessoa pessoa; // aqui

		novo = new Scanner(System.in);

		Integer escolha;

		do {

			System.out.println("\n 1-Calcular IMC");
			System.out.println(" 2-Sair");
			escolha = Integer.parseInt(novo.next());

			switch (escolha) {

			case 1: {
				pessoa = atv.lerDadosPessoa();// aqui
				double imc = i.calIMC(pessoa.getAltura(), pessoa.getPeso());//aqui
				System.out.println(i.getClassificacaoIMC(imc));//aqui
				break;
			}
			case 2: {
				System.out.println("Saindo...");
				break;
			}
			}

		} while (escolha != 2);

	}

	public static void main(String[] args) {
		Ativ02 ativ02 = new Ativ02();//aqui
		ativ02.showMenu();//aqui

	}
}

Procura as apostilas da caelum , vão lhe ajudar bastante.

valeu amigão, entendí agora… brigadão msm…