Java - comparar si-no con lo tecleado

Hola. Digamos que tengo que programar un programa :-| y resulta que no se como hacer que compare lo introducido por el teclado con las palabras "si" o "no". Lo intentado es lo siguiente:

import java.io.*;

public class diagnostico {

public static void main(String[] args) {

String siNo, si = "si", no = "no";

BufferedReader entrada = new BufferedReader(new InputStreamReader(System.in));
System.out.println("¿Funcionara?"); // Esta no es la pregunta, es de prueba
try {
siNo = entrada.readLine();
{
System.out.println(siNo);
if (siNo == si){
System.out.println("hola");
}
else {
System.out.println("ADIOS");
}
}
} catch (IOException io) {
System.out.println("Error de teclado");
System.exit( -1);
} catch (NumberFormatException nEx) {
System.out.println("Igual lo quito, no van numeros");
System.exit( -2);
}
}
}

Tengo que hacer un programa que vaya preguntando y segun se responda si o no, va a una pregunta, otra, o muestra una ultima, asi que supongo que esto lo hare a base de if y else-if, aunque viendo la cantidad de preguntas, van a salir los if pero un monton.
El problema es ese, que no consigo que lo que el usuario introduzca, lo compare con si o no, ya que si mete otra cosa deberia de cortar.
He probado poniendo si como boolean con valor true, quitando el si y el no de String, con comillas, sin comillas, con == y con = segun el caso que necesitaba, añadiendo parametros... pero nada, o me da la primera, o la segunda. ¿No se puede hacer lo que quiero? si no se puede ya lo hago para que se responda con 1 y 2, pero eso no creo que sea lo que se pide.
NOTA: No se como poner bien aqui el texto, ya se que es un horror leerlo asi.
Gracias, y hasta luego.
Leete la referencia de la clase String (en principio con la interfaz Comparable te sirve)

- ferdy
¿Podrias expicarte un poco mejor?
De hecho el profesor no nos ha explicado que string es una clase (de hecho ni nos explicó que es una clase)... por lo que me entero ahora, y claro, que es una interfaz menos.
Ahora bien, si "Comparable" es algo que se emplea como tal, no me sirve, ya que eso no lo he visto. (te comento porque segun google parece que se emplea asi, y eso no lo he visto)
if(siNo == si){ <=MAL

En java las cadenas (String) son objetos por lo tanto si usas el operador de igualdad lo que comparas es si las dos referencias que les pasas apuntan al mismo objeto. Para comparar cadenas puedes utilizar el método equals de la clase String:

if(siNo.equals(si)){

o otra forma con el método compareTo también de String:

if(siNo.compareTo(si) == 0){


Salu2!
A ver, declara mejor así:


String si = new String("si");
String no = new String("no");
String siNo = new String();

haz todo lo demas que hacias y luego para comparar usa el método equals como te han dicho antes.
Yo no veo mal declarar las cadenas de la forma

String si = "si";
String no = "no";

Peo bueno, cada uno tiene sus gustos ;)

Respecto a:

String siNo = new String();

No tiene mucho sentido si no la vas a inicializar con nada, xq de hecho despues vas a asignar la referencia a lo que devuelve el readLine, de modo que creas un objeto en valde;

Salu2!
Cierto lo de String siNo, es lo que pasa cuando contestas sin leer el código entero. :-|
6 respuestas