ciclo
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
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
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.
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.
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")));
}
}
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")));
}
}
Una cadena es un objeto, para comparar un objeto se utiliza el "equals" por lo que tienes que poner
while (! cadena1.equals(cadena2))
{
...
}
Saludos
while (! cadena1.equals(cadena2))
{
...
}
Saludos
