Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > Condicional "OR"

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

octubre 4, 2011 | Registered Commenterhugodepino


if ("s".equals(seleccion.toLowerCase())){
// se ha pulsado una S o una s
}
else {
// se ha pulsado otra secuencia de caracteres
}

octubre 4, 2011 | Unregistered Commenterchoces

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

octubre 4, 2011 | Unregistered Commenterresalpa

Perdon:

...
if (seleccion.equals("S") | (seleccion.equals("s")); {
..

octubre 4, 2011 | Unregistered Commenterresalpa

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

octubre 4, 2011 | Registered Commenterhugodepino

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

octubre 4, 2011 | Unregistered Commenterchoces

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

octubre 4, 2011 | Registered Commenterlap88

Tienes toda la razón con:

if ("S".equals(seleccion) || "s".equals(seleccion))

Gracias choces.

octubre 4, 2011 | Unregistered Commenterresalpa

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.

octubre 4, 2011 | Unregistered Commenterchoces