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: :wink:](https://www.guj.com.br/images/emoji/twitter/wink.png?v=9)