Foro sobre Java SE > Condicional "OR"
if ("s".equals(seleccion.toLowerCase())){
// se ha pulsado una S o una s
}
else {
// se ha pulsado otra secuencia de caracteres
}
...
if (s.equals("S") | (s.equals("s")); {
..
Aunque la explicacion anterior es mejor que ésta que acabo de escribir, creo que doy respuesta a lo que preguntas
Perdon:
...
if (seleccion.equals("S") | (seleccion.equals("s")); {
..
Mil gracias por la ayuda. Estoy estudiando Java y hay cosas que no vienen en el libro y el profesor no siempre lo tengo disponible. De veras que estos pequeños detalles hacen mucho para mi, esperero en un futuro poder ayudar yo,
Grax
FIN DE HILO ....................................................
Solamente un par de detalles, que pueden ser útiles, a propósito de equals y OR.
seleccion.equals("s") podría generar un NullPointerException si seleccion fuese null.
La manera de evitarlo sería:
"s".equals(seleccion) porque equals devuelve false si la variable es null
if (seleccion.equals("S") | (seleccion.equals("s")) comprueba ambos lados del OR.
Sin embargo, en este caso, bastaría con comprobar uno solo de los lados:
if (seleccion.equals("S") || (seleccion.equals("s")) para que obtuviésemos un resultado válido. No es un error, pero ahorra tiempo de ejecución.
La manera más segura, y rápida, en este último caso, de acuerdo con lo anterior sería:
if ("S".equals(seleccion) || "s".equals(seleccion))
la explicacion teorica del porque no puedes usar "==" con dos strings creo porque un String es del tipo objeto y se trata diferente a un Integer que es de tipo Number, por eso es que el operador == puede usarse con float, int, double, etc.
yo tambien ando aprendiendo :)
Tienes toda la razón con:
if ("S".equals(seleccion) || "s".equals(seleccion))
Gracias choces.
Puestos a hacer correcciones, también me coriijo a mi mismo :)
En mi primer ejemplo, no incluí ninguna protección contra null en la condición.
if ("s".equals(seleccion.toLowerCase()))
En este ejemplo, equals no devolvería un false si seleccion fuese null, sino si lo fuese el resultado del metodo toLowerCase(). Si seleccion fuese null, sí obtendríamos un NPE.
Para protegerse de un NullPointerException, podría cambiarse así:
if (seleccion == null ? false : "s".equals(seleccion.toLowerCase()))
@lap88: en realidad sí se puede usar == con objetos; el compilador no pondrá objeciones. Sin embargo, no estarás comparando el contenido de cada objeto, sino sus referencias. El peligro es que, sobre todo cuando se usa la multitarea, las referencias podrían ser las mismas, y el contenido de cada una diferente, en algún momento. Como los tipos primitivos, como los que describes, no son objetos, no existe ese peligro. De hecho es imposible usar con ellos el método equals, porque no existe.
En estas pocas líneas de código no se aplicar la condicional "O" en String (acostumbrado a otros lenguajes), quiero que distinga entre S mayúsculas y minúsculas, además seguro que es más fácil de hacer que todo lo que he escrito.
Gracias de antemano.
package fallo;
import javax.swing.JOptionPane;
public class Fallo {
public static void main(String[] args) {
String seleccion = "S";
seleccion= (JOptionPane.showInputDialog("¿Deseas seguir (S)?"));
if (seleccion == "S") or (seleccion="s"); {
System.out.print("Ok, funciona");
}
if (seleccion <> "S") or (seleccion <> "s"); {
System.out.println("No funciona");
}
}
}
PD: no es necesario que me recordéis que soy novato :)