Erro no if

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

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

}
[/code]

Me descupem se postei no local errado

Comparação de String com ==?

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

Normalmente, não funciona.
Agora

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

Deve funcionar

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

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

}
[/code]

Me descupem se postei no local errado[/quote]

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)

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()

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

[quote=Miguelrsn]No caso if (sexo.equals("M")||sexo.equals("m"))
seria uma boa?[/quote]

O jeito que o drsmachado disse fica melhor.

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

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

[quote=Sem_Nome][quote=Miguelrsn]No caso if (sexo.equals("M")||sexo.equals("m"))
seria uma boa?[/quote]

O jeito que o drsmachado disse fica melhor.

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

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

[quote=drsmachado][quote=Sem_Nome][quote=Miguelrsn]No caso if (sexo.equals("M")||sexo.equals("m"))
seria uma boa?[/quote]

O jeito que o drsmachado disse fica melhor.

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

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[/quote]

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

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…

[quote=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…[/quote]

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.

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.


[quote=Sem_Nome][quote=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…[/quote]

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.[/quote]
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

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. )

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: