Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: caludo en 20 de Enero 2015, 22:35
-
Hola tengo una duda de algo MUY simple y MUY basica pero no doy con la solución.Lo que quiero con el siguiente codigo es que al introducir el sexo, en caso de introducir "m" o "M" me indique que el sexo es "mujer", o en este caso "M", y si no, sexo pase a ser igual a "H". Se como hacerlo declarando sexo como char(el programa está hecho de esta manera en los comentarios de abajo(/*..........*/)), pero no sé el motivo por el cual no lo puedo hacer declarando la variable sexo como String, ya que siempre me acaba diciendo que Sexo=H, o sea ni si quiera hacer correctamente el primer "if" ya que no reconoce lo de "sexo==m" o "sexo=="M". Quisiera que alguien me dijera en que fallo y el motivo.Muchas gracias de antemano, saludos!!!
import java.util.Scanner;
public class Prueba {
public static void main(String[]args){
String sexo;
Scanner lectura=new Scanner(System.in);
System.out.println("Sexo?");
sexo=lectura.next();
if(sexo=="m"||sexo=="M"){
sexo="M";
}else{
sexo="H";
}
System.out.println("El sexo es:"+sexo);
}
}
/*
import java.util.Scanner;
public class Probes2 {
public static void main(String[]args){
char sexo;
Scanner lectura=new Scanner(System.in);
System.out.println("Sexo?");
sexo=lectura.next().charAt(0);
if(sexo=='m'||sexo=='M'){
sexo='M';
}else{
sexo='H';
}
System.out.println("El sexo es:"+sexo);
}
}
*/
-
Hola caludo
En Java la comparación quen quieres hacer se hace así:
if (sexo.equals("m") || sexo.equals("M")) {
sexo = "M";
}
También se puede poner:
if (sexo.equalsIgnoreCase("m")) {
sexo = "M";
}
que da por válida lo mismo mayúsculas que minúsculas.
Enlace recomendado:
https://www.aprenderaprogramar.es/index.php?option=com_content&view=article&id=642:clase-arrays-del-api-java-metodos-equals-comparar-copyof-copiar-fill-rellenar-ejemplos-cu00676b&catid=68:curso-aprender-programacion-java-desde-cero&Itemid=188 (https://www.aprenderaprogramar.es/index.php?option=com_content&view=article&id=642:clase-arrays-del-api-java-metodos-equals-comparar-copyof-copiar-fill-rellenar-ejemplos-cu00676b&catid=68:curso-aprender-programacion-java-desde-cero&Itemid=188)
Saludos
-
Muchisimas gracias por la respuesta, me ha servido de gran ayuda. Pero quisiera saber si aún así es posible compararlo de esa manera(solo es curiosidad) ya que si en lugar de hacerlo con un String lo hago con un char si me funciona el programa, o si es un entero,por ejemplo, tambien.Por eso era mi duda sobre por que no me deja hacerlo con String de la manera que lo hago.
Por ejemplo con enteros:
int numero;
Scanner lectura=new Scanner(System.in);
System.out.println("numero?");
numero=lectura.next();
if(numero==5||numero==6){
numero=1000;
}else{
numero=2000;
}
-
Con un String no es posible realizarlo ya que String es de tipo Objeto.
Al realizar una comparativa de un objeto con otra cosa, lo que se está comparando es el puntero del objeto, no el valor del objeto en si.
Parece que puede ser primitivo como lo es char o int, pero no lo es.
Por eso un String puede invocar el método equals().
Atentamente.
-
muchísimas gracias a ambos!!!
Todo aclarado!!!
-
Hola Jasper(o cualquiera que me pueda responder)!Entiendo lo que me has dicho, pero entonces por qué en este caso siendo similar al "programa" anterior( con la diferencia que aqui no uso la clase Scanner) si me funciona correctamente la comparación del String??? Sé que insisto en algo que es muy básico pero no quisiera quedarme con la duda
public class Letra{
public static void main(String[]args){
String nombre="J";
if(nombre=="J"){
System.out.println("La letra es J");
}else{
System.out.println("La letra no coincide");
}
}
}
-
Hola, no debes usar == para comparar objetos porque te genera resultados impredecibles y en programación esto no es aceptable. Para comparar objetos debes usar equals, que te genera resultados correctos siempre. Tienes la explicación en el curso Java, http://aprenderaprogramar.com/index.php?option=com_content&view=category&id=68&Itemid=188
Saludos
-
Muchas gracias!!!!