Processos de Seleção

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

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

[code]
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);

}

}[/code]

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

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

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

Post a classe Pessoa ou seus métodos.

Oi,

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

Tchauzin!

Oi,

Na chamada:

umaPessoa = umaInterface.peguePessoa();

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

Essa função esta definida como:

[code] 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;

}[/code]

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!

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

[code]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

} [/code]
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

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

Att

[quote=Astork]Nossa, nem da tempo de responder o post, ja responderam :smiley:

Att[/quote]

:twisted:


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;
	}

}

Oi,

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

Tchauzin!