Erro no if

14 respostas
M

Galera o programa não esta passando pelo if e não porque motivo, por favor quem puder me ajudar eu agradeço.

package Questao19;
import java.util.*;
public class resp {

	public static void main(String[] args) {
		Scanner ler = new Scanner(System.in);
		String nome,sexo;
		Short homem=0,mulher=0;
		for (int i =0; i<=56; i++){
			System.out.println("Informe seu nome:");
			nome = ler.next();
			System.out.println("Informe seu sexo M/F");
			sexo = ler.next();
			System.out.println(sexo+"Antes");
			if (sexo == "M"||sexo =="m"){
			System.out.println("Seu nome é "+nome+" e você é homem");
			homem++;
			}else
				if (sexo == "F"||sexo=="f"){
					System.out.println("Seu nome é"+nome+" e você é mulher");
					mulher++;
				}
		}
		System.out.println("Homens: "+homem);
		System.out.println("Mulheres: "+mulher);
	}

}

Me descupem se postei no local errado

14 Respostas

drsmachado

Comparação de String com ==?

if (sexo == "M"||sexo =="m"){

Normalmente, não funciona.
Agora

if("M".equalsIgnoreCase(sexo)){

Deve funcionar

S
Miguelrsn:
Galera o programa não esta passando pelo if e não porque motivo, por favor quem puder me ajudar eu agradeço.
package Questao19;
import java.util.*;
public class resp {

	public static void main(String[] args) {
		Scanner ler = new Scanner(System.in);
		String nome,sexo;
		Short homem=0,mulher=0;
		for (int i =0; i<=56; i++){
			System.out.println("Informe seu nome:");
			nome = ler.next();
			System.out.println("Informe seu sexo M/F");
			sexo = ler.next();
			System.out.println(sexo+"Antes");
			if (sexo == "M"||sexo =="m"){
			System.out.println("Seu nome é "+nome+" e você é homem");
			homem++;
			}else
				if (sexo == "F"||sexo=="f"){
					System.out.println("Seu nome é"+nome+" e você é mulher");
					mulher++;
				}
		}
		System.out.println("Homens: "+homem);
		System.out.println("Mulheres: "+mulher);
	}

}

Me descupem se postei no local errado

Simples meu jovem, String é um objeto. Se você quer comparar um objeto, ao usar == você está comparando apenas a referencia na memória. Se você usar o metodo equals você estara comparando se os dois objetos são iguais. Ou seja, ao inves de usar
sexo == "F"
use
"F".equals(sexo)
Rodrigo_Sasaki

Não se compara strings com o operador ==
Aliás, não se compara nenhum objeto assim, pois você estará comparando endereços de memória.

use o método equals()

M

No caso if (sexo.equals("M")||sexo.equals("m"))
seria uma boa?

S

Miguelrsn:
No caso if (sexo.equals("M")||sexo.equals("m"))
seria uma boa?

O jeito que o drsmachado disse fica melhor.

if("M".equalsIgnoreCase(sexo)){ //codigo }

M

Entendi, muito obrigado a todos que responderam. Pode fechar o tópico

drsmachado

Sem_Nome:
Miguelrsn:
No caso if (sexo.equals("M")||sexo.equals("m"))
seria uma boa?

O jeito que o drsmachado disse fica melhor.

if("M".equalsIgnoreCase(sexo)){ //codigo }

Sempre que for comparar utilizando o equals ou equalsIgnoreCase, considere que o primeiro argumento deve ser o objeto que conhecemos.
Pois, considerando o caso, se sexo for, por alguma razão, nulo, a validação não lança uma NullPointerException

S

drsmachado:
Sem_Nome:
Miguelrsn:
No caso if (sexo.equals("M")||sexo.equals("m"))
seria uma boa?

O jeito que o drsmachado disse fica melhor.

if("M".equalsIgnoreCase(sexo)){ //codigo }

Sempre que for comparar utilizando o equals ou equalsIgnoreCase, considere que o primeiro argumento deve ser o objeto que conhecemos.
Pois, considerando o caso, se sexo for, por alguma razão, nulo, a validação não lança uma NullPointerException

Sim, por experiencia propria SEMPRE deixe a variavel como argumento para o equals(). Vai te poupar muitas dores de cabeça.

M

Já estou aprendendo, rsrs. Muito obrigado galera. Uma pergunta off topic antes que fechem. O eclipse possui alguma ferramenta para preencher automático as variáveis. Tipo, aqui Short homem=0,mulher=0; for (int i =0; i<=56; i++){ , digitar isso tudo ou mais para testar o código é meio trabalhoso…

S

Miguelrsn:
Já estou aprendendo, rsrs. Muito obrigado galera. Uma pergunta off topic antes que fechem. O eclipse possui alguma ferramenta para preencher automático as variáveis. Tipo, aqui Short homem=0,mulher=0; for (int i =0; i<=56; i++){ , digitar isso tudo ou mais para testar o código é meio trabalhoso…

Você fala algo como

int essenomeehmuitograndeporissodemoraparadigitar;
essenomeeh

ai ele terminar de escrever o nome da variavel?

Se for isso segura ctrl e aperta espaço. Isso funciona para metodos também.

Se for algo como atribuir 0 para elas eu creio que nao.

E

Tem e se chama “template”. Exemplos de templates podem ser encontrados chamando no menu Window, Preferences, Java, Templates.

No caso do for, digite “for” e tecle Ctrl+Espaço.


M

Sem_Nome:
Miguelrsn:
Já estou aprendendo, rsrs. Muito obrigado galera. Uma pergunta off topic antes que fechem. O eclipse possui alguma ferramenta para preencher automático as variáveis. Tipo, aqui Short homem=0,mulher=0; for (int i =0; i<=56; i++){ , digitar isso tudo ou mais para testar o código é meio trabalhoso…

Você fala algo como

int essenomeehmuitograndeporissodemoraparadigitar;
essenomeeh

ai ele terminar de escrever o nome da variavel?

Se for isso segura ctrl e aperta espaço. Isso funciona para metodos também.

Se for algo como atribuir 0 para elas eu creio que nao.


Não bem isso mano digo que com esse laço eu vou ter que digitar o nome e o sexo 56 vezes para testar o código. Queria saber se o eclipse tem alguma ferramenta para preencher as variáveis

String nome,sexo;

Automático

E

Ah, entendi, você queria um robozinho que testasse seu programa para você, não?

Eu costumo criar a entrada com um arquivo-texto , e redirecionar a entrada para não ter de digitar tudo isso.

(Não sei se dá para redirecionar a entrada dentro do próprio Eclipse. É que meus programas são meio complicados de usar e costumo acabar testando certas coisas fora do Eclipse. )

M

A entendi, já desconfiava que não tinha. É que antes de passar para o eclipse eu eu aprendi algoritmo no Visualg e la tinha. Obrigado :wink:

Criado 11 de maio de 2012
Ultima resposta 11 de mai. de 2012
Respostas 14
Participantes 5