Foro de elhacker.net

Programación => Java => Mensaje iniciado por: Finishim en 25 Abril 2015, 18:15 pm



Título: Valor booleano como String ? (solucionado)
Publicado por: Finishim en 25 Abril 2015, 18:15 pm
Hola a toda la comunidad, soy nuevo por acá y estoy recién iniciandome en lo que es programación en java (orientada a objetos), estoy comenzando con el IDE "Blue J" ya que en clases estamos aprendiendo el paradigma orientado a objetos.

Tengo un problemita con un ejercicio, espero que me puedan orientar a alguna posible solución. El ejercicio consta en pedir datos a un cliente, el nombre y el tipo de cliente (premium o normal), para esto en la clase Cliente asigne una variable de tipo booleana para el tipo de cliente, o sea si tipoCliente = true (cliente premium) si es false (cliente normal) y al final debe imprimir el nombre ingresado y el tipo de cliente

Primero pido el nombre por consola a través del metodo main, ingreso el nombre sin problemas, luego pregunto ("El cliente es premium ? S/N") "s" si es premium y "n" si no lo es, y aqui viene el problema, al momento de mostrar los datos, este dice :

nombre: Juanito Perez   ---> sin problemas
tipo: true o flase  (segun la letra ingresada)

al mostrar el tipo, este dice true o false, pero yo quiero que diga lietralmente:

 tipo: premium o normal (según la letra ingresada), que debo hacer aquí? una transformación de boolean a string ?? agradecería cualquier ayudita. gracias de antemano

aqui dejo el codigo con las 2 clases:

http://www.hastebin.com/qimamazufo.avrasm  --> clase GUI(interfaz) con el metodo main

http://www.hastebin.com/ibenakepeq.axapta  --> clase cliente

pd: usé hastebin ya que pastebin me borra el codigo al instante, no se el por que.


Título: Re: Valor booleano como String ?
Publicado por: Usuario Invitado en 25 Abril 2015, 18:33 pm
Simplemente al mostrar el valor premium coloca una condición:

Código
  1. System.out.println("Tipo: "+((tipo) ? "Premium" : "Normal"));

Si tipo es true se ejecuta el primer bloque, si es false, el segundo.


Título: Re: Valor booleano como String ?
Publicado por: Finishim en 25 Abril 2015, 18:44 pm
Simplemente al mostrar el valor premium coloca una condición:

Código
  1. System.out.println("Tipo: "+((tipo) ? "Premium" : "Normal"));

Si tipo es true se ejecuta el primer bloque, si es false, el segundo.

gracias por responder, pero no entiendo lo que me quieres decir :(

dices que debo poner una condición al mostrar el mensaje ? es decir  dentro del System.out.println() ??  no entiendo

sl2


Título: Re: Valor booleano como String ?
Publicado por: Usuario Invitado en 25 Abril 2015, 18:48 pm
Dado que el campo tipo del objeto es boolean, entonces, ¿cómo piensas mostrar Premium o Normal? Es por ésto que debes hacer la condición. No hay ninguna forma de convertir un boolean a String.

Ésto:

Código
  1. (tipo) ? "Premium" : "Normal"

Debes de colocarlo en donde vas a mostrar el tipo (Premium o Normal), ya sea en una impresión por consola, o en un JTable, en un JList, o donde vayas a mostrar ese dato.



Título: Re: Valor booleano como String ?
Publicado por: Finishim en 25 Abril 2015, 19:25 pm
Dado que el campo tipo del objeto es boolean, entonces, ¿cómo piensas mostrar Premium o Normal? Es por ésto que debes hacer la condición. No hay ninguna forma de convertir un boolean a String.

Ésto:

Código
  1. (tipo) ? "Premium" : "Normal"

Debes de colocarlo en donde vas a mostrar el tipo (Premium o Normal), ya sea en una impresión por consola, o en un JTable, en un JList, o donde vayas a mostrar ese dato.



te agradezco nuavemente por responder, pero no logro entender que es lo que debo condicionar y como, se pueden hacer condiciones dentro de un system.out ??

se me ocurre algo asi como :
Código:
System.out.println( if(cltNuevo.setTipoCliente == true)"premium" : "normal" );    

no se bro, no logro entender, mejor iré a estudiar antes de plasmar preguntas

gracias de todos modos, saludos


Título: Re: Valor booleano como String ?
Publicado por: Usuario Invitado en 25 Abril 2015, 19:29 pm
Eso se llama operador ternario. Es como un if, pero compacto y sin la palabra clave if.

es lo mismo que hicieras:

Código
  1. if(tipo) {
  2.    System.out.println("Tipo: Premium");
  3. } else {
  4.    System.out.println("Tipo: Normal");
  5. }

Con el operador ternario:

Código
  1. System.out.println("Tipo: "+((tipo) ? "Premium" : "Normal"));


Saludos.


Título: Re: Valor booleano como String ?
Publicado por: Thryks en 25 Abril 2015, 19:42 pm
La verdad es que me ha impresionado la respuesta de Gus, yo soy bastante novato en esto de la programacion pero decidi hacer el ejercicio por mi cuenta haber como me salía, pensé en esto. Quisiera saber si lo ves bien o esta mal Gus, me gustaría tu opinion:
Código:
import java.util.Scanner;
public class HolaBro{
    public static void main(String[] args){
//Declaramos las variables de entorno

Scanner metodoentrada = new Scanner(System.in); //Escaner
String nombre;//Variable que almacenará el nombre
char crf;    //Variable char que recogera la entrada por teclado de la 's' o la 'n'


System.out.println("Bienvenido ,introduce el nombre");
nombre = metodoentrada.nextLine();

System.out.println("Este es el nombre" + nombre);//Comprobamos que el nombre se ha introducido correctamente
System.out.println("Eres premiun? S/N");

crf = metodoentrada.next().charAt(0);
System.out.println("Este es el resultado de si eres premiun?" + crf);

if (crf == 's'){
System.out.println("Eres premiun");
}
else if (crf == 'n'){
System.out.println("Eres un usuario normal");
}
else {
System.out.println("No has seleccionado un valor correcto");
}

}
}
PD: Lo he modificado para que se entienda mejor


Título: Re: Valor booleano como String ?
Publicado por: PabloPbl en 25 Abril 2015, 20:17 pm
Acá tenes un pequeño ejemplo usando el operador ternario:

Código
  1. import java.util.Scanner;
  2.  
  3. public class BooleanoComoString {
  4.  
  5.    public static void main(String[] args) {
  6.        Scanner scanner = new Scanner(System.in);
  7.  
  8.        System.out.println("Cual es tu nombre");
  9.        String clientName = scanner.nextLine();
  10.  
  11.        System.out.println("¿Eres premium? s/n");
  12.        char premium = scanner.nextLine().charAt(0);
  13.  
  14.        String isPremium = (premium == 's')? "es Premium" : "no es premium";
  15.  
  16.        System.out.println("El cliente se llama "+clientName+" y "+isPremium);
  17.    }
  18. }
  19.  


Título: Re: Valor booleano como String ?
Publicado por: Usuario Invitado en 25 Abril 2015, 20:25 pm
Tu código es correcto Thryks.

Si estuvieran aplicando POO, ésto se haría más sencillo:

Código
  1. public class User {
  2. private String name;
  3. private Character type;
  4.  
  5. public User() {
  6.  
  7. }
  8. public User(String name, Character type) {
  9. this.name = name;
  10. this.type = type;
  11. }
  12. public String getName() {
  13. return name;
  14. }
  15. public void setName(String name) {
  16. this.name = name;
  17. }
  18. public Character getType() {
  19. return type;
  20. }
  21. public void setType(Character type) {
  22. this.type = type.toLowerCase();
  23. }
  24. @Override
  25. public String toString() {
  26. return "Nombre: "+name+"\nTipo: "+(type == 'p') ? "Premium" : "Normal";
  27. }
  28. }

Código
  1. Scanner reader = new Scanner(System.in);
  2. User user = new User();
  3. System.out.print("Ingrese su nombre: ");
  4. user.setName(reader.nextLine());
  5. System.out.print("\nTipo de usuario (P/Premium - N/Normal): ");
  6. user.setPremium(reader.next().charAt(0););
  7. // mostrar la info del usuario
  8. System.out.println("\nInfo del usuario:"+user); // llamada automática a toString()


Saludos.


Título: Re: Valor booleano como String ?
Publicado por: PabloPbl en 25 Abril 2015, 20:43 pm
Aún se puede hacer en menos lineas el code que te pase. Ademas de ser menos lineas que el anterior, este se fija si el usuario ha ingresado un valor que no corresponde.

Código
  1. import java.util.Scanner;
  2.  
  3. public class BooleanoComoString {
  4.  
  5.    public static void main(String[] args) {
  6.        Scanner scanner = new Scanner(System.in);
  7.  
  8.        System.out.println("Cual es tu nombre");
  9.        String clientName = scanner.nextLine();
  10.  
  11.        System.out.println("¿Eres premium? s/n");
  12.        char premium = scanner.nextLine().charAt(0);
  13.  
  14.        System.out.println("El cliente se llama "+clientName+" y "+((premium != 's' && premium != 'n')?"no se puede saber si es premium":((premium == 's')?"es premium":"no es premium")));
  15.    }
  16. }
  17.  

Pero no te recomiendo usar este operador de esta manera, ya que es imposible entender el code a simple vista, solo es para casos sencillos y específicos.

Un saludo.


Título: Re: Valor booleano como String ?
Publicado por: Finishim en 26 Abril 2015, 01:59 am
Muchas gracias, ahora voy entendiendo.


Título: Re: Valor booleano como String ?
Publicado por: PabloPbl en 26 Abril 2015, 02:50 am
El operador ternario es parecido al if, pero hay una diferencia entre ambos. Por lo que tengo entendido, el operador ternario solo sirve para cuando se quiere asignar un valor o pasar algo como parámetro, nose si servirá para algo más, si alguien sabe que lo diga por favor.

Por ejemplo:
Código
  1. public construct(boolean name) {
  2.     changeName((name)?"Titulo 1":"Titulo 2");
  3. }
  4.  
  5. public void changeName(String name) {
  6.     this.setName(name);
  7. }
  8.  

Por favor que alguien me corrija si me equivoco.

Saludos.


Título: Re: Valor booleano como String ?
Publicado por: Finishim en 26 Abril 2015, 03:28 am
a ver hay algo que me quedo dando vuelta, me resulta tal como dicen con el operador terniario, pero para llamar al metodo setTipoCliente de la clase Cliente, debo almacenar otra variable de tipo boolean en el metodo main ??


Título: Re: Valor booleano como String ?
Publicado por: PabloPbl en 26 Abril 2015, 05:02 am
¿Que no resolviste el problema anterior?, ¿Que es lo que quieres hacer exactamente ahora?, explícate más.


Título: Re: Valor booleano como String ?
Publicado por: Finishim en 26 Abril 2015, 05:42 am
¿Que no resolviste el problema anterior?, ¿Que es lo que quieres hacer exactamente ahora?, explícate más.

Mira, me funciono haciendo una condición pero sin utilizar los métodos de la clase Cliente

es decir:
Código:
  if(tipoCliente == "s")
                      {
                           System.out.println("cliente premium");
                       }
                       else
                       if (tipoCliente == "n")
                       {
                         System.out.println("cliente normal");
                       }
         
         la variable tipoCliente la tengo declarada en main como String para poder ingresar S o N
     


Código:
public void setTipoCliente(boolean tipoCliente)  // metodo que asigna un tipo de cliente, con una condicion para mostrar el tipo de Cliente
    { 
        this.tipoCliente = tipoCliente;
    }

 entonces lo que quiero es hacer es llamar al metodo setTipoCliente de la clase Cliente y pasarle un parametro, en este caso el string que estoy colocando (s o n)  al igual como lo hice con el nombre pero esta vez con el tipo de cliente

algo asi como:  cltNuevo.setTipoCliente(tipoCliente)
                    y luego mostrar a traves de un print "es normal" o "premium"
   
pero me dice que no son compatibles los tipos de datos, ya que tipoCliente es String y en la clase esta como boolean


PD: como pongo los códigos como los pusiste tu ?


Título: Re: Valor booleano como String ?
Publicado por: PabloPbl en 26 Abril 2015, 06:03 am
Y pues haz que ese método reciba un String o un char en vez de un boolean, y que reciba como parámetro, "s" o "n", así:

Código
  1. public void setTipoCliente(char tipoCliente)  // método que asigna un tipo de cliente, con una condición para mostrar el tipo de Cliente
  2.    {  
  3.        if(tipoCliente == 's')
  4.        {
  5.          System.out.println("es premium");
  6.        }
  7.        else
  8.        {
  9.          System.out.println("es normal");
  10.        }
  11.        this.tipoCliente = tipoCliente;
  12.    }
  13.  

Citar
PD: como pongo los códigos como los pusiste tu ?

Para hacer eso tienes que poner color a todas las palabras reservadas que conozcas, por ejemplo la palabra reservada class la pondrías en negrita y en color morado, y así con todas las palabras reservadas...


Ya veo que fuera así nadie lo haría xD, Ve al comboBox que dice GeSHI y ahí elige Java, luego entre las etiquetas que te genera pon tu código.


Título: Re: Valor booleano como String ?
Publicado por: Finishim en 26 Abril 2015, 06:34 am
Y pues haz que ese método reciba un String o un char en vez de un boolean, y que reciba como parámetro, "s" o "n", así:

Código
  1. public void setTipoCliente(char tipoCliente)  // método que asigna un tipo de cliente, con una condición para mostrar el tipo de Cliente
  2.    {  
  3.        if(tipoCliente == 's')
  4.        {
  5.          System.out.println("es premium");
  6.        }
  7.        else
  8.        {
  9.          System.out.println("es normal");
  10.        }
  11.        this.tipoCliente = tipoCliente;
  12.    }
  13.  

Para hacer eso tienes que poner color a todas las palabras reservadas que conozcas, por ejemplo la palabra reservada class la pondrías en negrita y en color morado, y así con todas las palabras reservadas...


Ya veo que fuera así nadie lo haría xD, Ve al comboBox que dice GeSHI y ahí elige Java, luego entre las etiquetas que te genera pon tu código.

jaja pense que era verdad lo de ir poniendo 1 por 1 cada letra del codigo xD

lo realize como dices, igual había pensado pero no se por que no lo hice, ahora lo hice pero no muestra premium o normal, si no que muesta s o n, es decir la letra que pongo

nombre: juan
tipo: s


Título: Re: Valor booleano como String ?
Publicado por: PabloPbl en 26 Abril 2015, 06:50 am
Eso pasa por que en el método getTipoCliente estas devolviendo la variable que guarda el tipo de cliente. Si te fijas esa variable solo devuelve una letra y no un String ni nada, es por eso que te muestra una letra nada mas.

¿Por que no haces lo que te dijo Gus?

Así se vería tu método getTipoCliente, aplicando lo que dice Gus:
Código
  1. public void getTipoCliente()  // método para mostrar el tipo de cliente
  2.    {
  3.        System.out.println("Tipo: "+((this.tipoCliente == 's') ? "Premium" : "Normal"));
  4.    }
  5.  

Pero estoy viendo tu método main, tu impresión, y si pones este método no te va funcar, a no ser que cambies un par de cosas, pero no te la voy a complicar tanto. Así que pon el método anterior de la siguiente forma:

Código
  1. public String getTipoCliente()  // método para mostrar el tipo de cliente
  2.    {
  3.        String tipo = (tipoCliente == 'si') ? "Premium" : "Normal";
  4.        return tipo;
  5.    }
  6.  

En el code de arriba volví a hacer uso del operador ternario, como vez me viene como anillo al dedo xD, acostúmbrate a usarlo y no le tengas miedo que no muerde.


Título: Re: Valor booleano como String ?
Publicado por: Finishim en 26 Abril 2015, 07:28 am
Lo hice tal cuál pero al ingresar la letra S, me muestra como tipo: normal, siendo que debería mostrar premium


Código
  1. Cliente cltNuevo=new Cliente(); // creo un objeto de tipo Cliente
  2.  
  3.        System.out.println("ingrese el nombre del cliente");  // solicito el nombre del cliente
  4.        nombreCliente=lector.nextLine();
  5.        cltNuevo.setNombreCompleto(nombreCliente); // Se entrega estado "nombre" al nuevo objeto Cliente
  6.  
  7.  
  8.         do{
  9.             System.out.println ("Es premium ?  S/N");
  10.             tipoCliente = lector.nextLine();
  11.             cltNuevo.setTipoCliente(tipoCliente);
  12.             i = i + 1;
  13.           }
  14.           while(!"s".equals(tipoCliente.toLowerCase()) && !"n".equals(tipoCliente.toLowerCase()));  // valido que se ingrese s o n
  15.  
  16.                System.out.println("nombre: "+cltNuevo.getNombreCompleto());
  17. System.out.println("tipo cliente: "+cltNuevo.getTipoCliente());

y la clase cliente:

Código
  1. public Cliente ()
  2.                                      // constructor sin parametros
  3.    {
  4.        nombreCompleto= "";
  5.        tipoCliente="";              
  6.  
  7.    }
  8.  
  9.    public Cliente (String nombreCompleto, String tipoCliente)  // constructor con parametros
  10.    {
  11.        this.nombreCompleto=nombreCompleto;
  12.        this.tipoCliente = tipoCliente;
  13.  
  14.    }
  15.  
  16. public void setTipoCliente(String tipoCliente)  // metodo que asigna un tipo de cliente, con una condicion para mostrar el tipo de Cliente
  17.    {  
  18.  
  19.        this.tipoCliente = tipoCliente;
  20.  
  21.    }
  22.  
  23. public String getTipoCliente()  // metodo para mostrar el tipo de cliente
  24.    {
  25.         String tipo = (tipoCliente == "s") ? "Premium" : "Normal";
  26.        return tipo;
  27.    }

Cambie las variables boolean de la clase cliente por String tal como me dijieron, ahora  aplique lo que dijo Gus, que no lo había hecho por que lo vi mas complicado de lo que parecía xD,   ahora al ingresar "S" me muestra tipo: Normal en vez de premium

pd: no inclui los metodos de setNombre para no alargar el codigo


Título: Re: Valor booleano como String ?
Publicado por: PabloPbl en 26 Abril 2015, 07:42 am
¿Puedes poner el código para verlo?


Título: Re: Valor booleano como String ?
Publicado por: Finishim en 26 Abril 2015, 07:50 am
¿Puedes poner el código para verlo?

si, ahi modifique el mensaje anterior :D


Título: Re: Valor booleano como String ?
Publicado por: PabloPbl en 26 Abril 2015, 08:03 am
Pues el error esta en el método que devuelve el tipo de cliente, yo te puse el código para hacer comparaciones con char, entonces tu preferiste usar String, la cual es una clase y se comparara de diferente manera(equals()).

Entonces el método te debería quedar así:
Código
  1. public String getTipoCliente()  // método para mostrar el tipo de cliente
  2.    {
  3.        String tipo = (tipoCliente.equals("s")) ? "Premium" : "Normal";
  4.        return tipo;
  5.    }
  6.  

Pon el check verde si ya solucionaste el problema, un saludo.


Título: Re: Valor booleano como String ?
Publicado por: Finishim en 26 Abril 2015, 08:15 am
genial! al fin gracias a los que respondieron gus, pablo y Thryks sobretodo por la paciencia

saludos!