ciclo

canalero
03 de Abril del 2006
Hola, tengo una duda, que tendrè mal en este código que al introducir la frase YA BASTA no termina el ciclo

import java.io.*;

class saludar
{
public static void main(String args[]) throws IOException
{
String vNombre;
boolean vFin;
do{
BufferedReader teclado = new BufferedReader(new InputStreamReader(System.in));
System.out.print("Escribe tu nombre: ");
vNombre = teclado.readLine();
System.out.print("n"+vNombre+ " Bienvenido a Desarrollo de softwarennnn");

}while(vNombre != "YA BASTA"));
}
}


gracias por su ayuda

Diego
03 de Abril del 2006
Te recomiendo algunos cambios de cara a a implementación:
import java.io.*;

class Saludar
{
public static void main(String args[]) throws IOException{
String nombre;
boolean seguir;
String palabraSalida="BASTA YA";
BufferedReader teclado = new BufferedReader(new InputStreamReader(System.in));
do{
System.out.print("Escribe tu nombre: ");
nombre = teclado.readLine();
if(seguir=(!nombre.equals(palabraFin))
System.out.printf("%n %s Bienvenido a Desarrollo de software%n%n%n%n",nombre);
}while(seguir));
}
}

Brevemente:
-He adaptado los nombres de clase y variables y las llaves al formato recomendado, que facilitará la lectura del código posteriormente.
-Una cadena literal es un objeto, que ocupa memoria. Aunque desconozco si el hecho de declarar un literal en un bucle hace que se creen en memoria tantos objetos como veces se repita el bucle, de producirse se desperdiciaría memoria inútilmente. Animo a que si alguien sabe algo al respecto, responda a este post. En cualquier caso se declara una referencia, y se llama al método equals sobre dicha referencia y nos ahorramos este problema.
-Aunque lo de instanciar un BufferedReader en cada iteración funciona, estás creando tantos objetos en memoria de este tipo como veces itere el bucle, y aunque el recolector de basura los recoja automáticamente, no por ello vamos a llenar la memoria de objetos, del mismo modo de que porque haya barrenderos no vamos tirando basura al suelo porque sí.
-He utilizado printf en lugar de print, que permite formatear mejor la salida, además de que /n es un salto de línea en algunos sistemas, mientras que en otro es /r o /r/n y el hecho de utilizar printf con %n nos evita el problema, y nuestro programa es más portable.
Espero que te sirva.

HECSH
03 de Abril del 2006
LOS STRINGS NO SE PUEDEN COMPARAR CON != O CON ==, SE COMPARAN CON EL BOOLEANO EQUALS, Y EL IGNORE CASE ES PARA NO DISTINGUIR ENTRE MAYUSCULAS Y MINUSCULAS AQUI ESTA LA SOLUCION

import java.io.*;

class saludar
{
public static void main(String args[]) throws IOException
{
String vNombre;
do{
BufferedReader teclado = new BufferedReader(new InputStreamReader(System.in));
System.out.print("Escribe tu nombre: ");
vNombre = teclado.readLine();

if (vNombre.equalsIgnoreCase("ya basta")) break;

System.out.print("\n"+vNombre+ " Bienvenido a Desarrollo de software\n\n\n\n");

}while(!(vNombre.equalsIgnoreCase("ya basta")));

}
}

erdeivit
03 de Abril del 2006
Una cadena es un objeto, para comparar un objeto se utiliza el "equals" por lo que tienes que poner

while (! cadena1.equals(cadena2))
{
...
}

Saludos

cucu
03 de Abril del 2006
do {
}while (vNombre.compareTo("YA BASTA") !=0);

Si es igual a 0 es el mismo String y sino es distinto