Processos de Seleção

13 respostas
alex88

tenho um problema que não consigo resolver
soma += umaPessoa.informeIdade(); esta dando erro
package principal;

public class Main {
	public static void main(String[] p) {

		Interface umaInterface = new Interface();
		Pessoa umaPessoa;
		double soma = 0;//soma idade das pessoas
		int numHom = 0;//quantidade de homens
		int numFem = 0;//quantidade de mulheres
		double medFem = 0;//média feminina
		char sexo;

		int quant = umaInterface.pegueQuantPessoa();

		do {
			umaPessoa = umaInterface.peguePessoa();
			soma += umaPessoa.informeIdade();
			sexo = umaPessoa.informeSexo();

			if(sexo =='m'||sexo=='M'){
				numHom++;

			}else{
				numFem++;
				medFem  += umaPessoa.informeIdade();
                             }
			quant++;

		   } while (quant>0);
		double media = soma/quant;
		double mediaFem = 0;
		if(numFem >0)
			mediaFem = medFem/numFem;
		umaInterface.mostreResul(media, medFem, numHom);


	}

}

PS: Inserindo as tags code. By Lina

13 Respostas

gRoOve

Amigo, primeiro por favor use as tags code no seu código, assim fica difícil analisar.

alex88
package principal; 

public class Main { 
public static void main(String[] p) { 

Interface umaInterface = new Interface(); 
Pessoa umaPessoa; 
double soma = 0;//soma idade das pessoas 
int numHom = 0;//quantidade de homens 
int numFem = 0;//quantidade de mulheres 
double medFem = 0;//média feminina 
char sexo; 

int quant = umaInterface.pegueQuantPessoa(); 

do { 
umaPessoa = umaInterface.peguePessoa(); 
soma += umaPessoa.informeIdade(); 
sexo = umaPessoa.informeSexo(); 

if(sexo =='m'||sexo=='M'){ 
numHom++; 

}else{ 
numFem++; 
medFem += umaPessoa.informeIdade(); 
} 
quant++; 

} while (quant>0); 
double media = soma/quant; 
double mediaFem = 0; 
if(numFem >0) 
mediaFem = medFem/numFem; 
umaInterface.mostreResul(media, medFem, numHom); 


} 

}
edimarakika

Errrr…
O que vc realmente quer?? Oo
Quero dizer, o que o programa deveria fazer?? e o que há de errado?

alex88

O programa deve contar a quantidade de homens, quantidade de mulheres, idade média de todos e idade médias das mulheres

Exception in thread “main” java.lang.NullPointerException
at principal.Main.main(Main.java:18)
Java Result: 1

package principal;

import javax.swing.JOptionPane;

public class Interface {

	Pessoa umaPessoa;
	int total,quant,soma,vIdade;
	String vSexo;

	public int pegueQuantPessoa() {
		String numeroLido;
		numeroLido = JOptionPane
				.showInputDialog("digite quantas pessoas deseja processar ");
		quant = Integer.parseInt(numeroLido);
		total = total + quant;
		return total;

	}

	public Pessoa peguePessoa() {
            int idade = vIdade;
               
		while (total >= 1) {
			vSexo = JOptionPane.showInputDialog("digite o sexo da pessoa ");
                        
                        vIdade = Integer.parseInt(JOptionPane.showInputDialog("digite a idade da pessoa "));
			total--;

		}

		return umaPessoa;

	}

	public void mostreResul(double media, double medFem, int numHom) {
		System.out.print("idade média das pessoas " + media);
		if (medFem >= 0)
			System.out.println("idade média feminina " + medFem);
		else
			System.out.println("nenhuma mulher");
		System.out.println("quantidade de homens " + numHom);

	}

}

a classe pessoa é mais simples, se precisar eu coloco aqui
obrigado

adriano_si

Cara… precisa da pessoa sim, afinal o método informeIdade() deve estar lá e precisamos saber o que ele retorna.

FelipeGalli

Post a classe Pessoa ou seus métodos.

lina

Oi,

O problema esta no método peguePessoa() que retorna um objeto “nullo”.

Tchauzin!

lina

Oi,

Na chamada:

umaPessoa = umaInterface.peguePessoa();

Ele faz uso da função peguePessoa().

Essa função esta definida como:

public Pessoa peguePessoa() {
            int idade = vIdade;
               
		while (total >= 1) {
			vSexo = JOptionPane.showInputDialog("digite o sexo da pessoa ");
                        
                        vIdade = Integer.parseInt(JOptionPane.showInputDialog("digite a idade da pessoa "));
			total--;

		}

		return umaPessoa;

	}

Esta por sua vez, retorna um objeto umaPessoa, que foi declarada no inicio da classe assim:

Pessoa umaPessoa; // Deveria ser instanciada assim: Pessoa umaPessoa = new Pessoa();

Após isto, você faz a chamada:

soma += umaPessoa.informeIdade();

Porém a variavel umaPessoa está nula e não conseguira acessar o método informeIdade().

Tchauzin!

A

Acho que o post está um pouco bagunçado..

No método peguePessoa, está retornando uma Pessoa, que é atributo da classe Interface, porem em momento algum você instancia esta classe Pessoa. Veja
public Pessoa peguePessoa() {  
        int idade = vIdade;  
                
       while (total >= 1) {  
           vSexo = JOptionPane.showInputDialog("digite o sexo da pessoa ");  
                         
                       vIdade = Integer.parseInt(JOptionPane.showInputDialog("digite a idade da pessoa "));  
           total--;  
 
       }  
 
       return umaPessoa;    << RETORNA A REFERENCIA DA PESSOA DECLARADA COMO ATRIBUTO DA CLASSE
 }
Atributo da classe
Pessoa umaPessoa;
Mas aonde é instanciado esta referencia umaPessoa? não encontrei no seu código e provavelmente é isto que da o erro de NullPointer. Pois o peguePessoa está retornando uma referencia NULL, logo a operacao soma += umaPessoa.informeIdade(); dá erro.

OBS: Como dica, é importante você aprender a utilizar o debug da IDE que você utiliza, pois erros do tipo NullPointer, são faceis de ser identificados !!!

Att

A

Nossa, nem da tempo de responder o post, ja responderam :smiley:

Att

lina

Astork:
Nossa, nem da tempo de responder o post, ja responderam :smiley:

Att

:twisted:

alex88
package principal;

public class Pessoa {
	protected int idade;
	protected char sexo;

	public Pessoa(int vIdade, char vSexo) {
		idade = vIdade;
		sexo = vSexo;
	}

	public char informeSexo() {

		return sexo;
	}

	public int informeIdade() {
                
		return idade;
	}

	public void recebaValorIdade(int vIdade) {
		idade = vIdade;
	}

	public void recebaValorSexo(char vSexo) {
		sexo = vSexo;
	}

}
lina

Oi,

De uma lida nos Posts acima, sua dúvida já foi respondida.

Tchauzin!

Criado 20 de março de 2011
Ultima resposta 21 de mar. de 2011
Respostas 13
Participantes 7