Autor Tema: Java. Comparar datos tipo String. CU00657B Compila pero no funciona el if  (Leído 2397 veces)

DavidP83

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 3
    • Ver Perfil
Este es mi código. Compila pero no funciona. No realiza el primer "if" por lo que entiendo que su resultado es siempre "false" aun comprobando el contenido de "letra" que es correcto. Aunque sea "a" o "A" su contenido, el "if" siempre es falso. Tengo Java 8 SE. Por favor ayúdenme o aclárenme el por qué no es posible mi código  :'(.
Gracias.

Código: [Seleccionar]
import java.lang.String;  /** Importa clase String para usar "length", "substring" y "equals" (No es necesario) **/
import java.util.Scanner; /** Importa clase Scanner para usar "nextLine"  (No es necesario)**/

public class IntroduceCadenaAnalizoCadena{
    public static void main(String[] args){
        /**ATRIBUTOS MAIN**/
        Scanner texto=new Scanner(System.in);
        String teclado="";
        String letra="";
        int tamaño=0;

        /** MENSAJE INSTRUCTIVO PARA EL USUARIO **/
        System.out.println("Introduce una cadena de caracteres.\nTe indicaremos si empieza por \"A\" o \"a\" y aproximadamente cuantos carácteres la compone.\nRecuerda: Los espacios y signos son caracteres.\nDAME UNA CADENA:");

        /** RECOGIDA POR TECLADO **/
        teclado=texto.nextLine();

        /** FUNCIÓN: Análisis y respuesta al usuario **/
        letra=teclado.substring(0,0);
        tamaño=teclado.length();
       
        if(letra=="a"||letra=="A"){ /** COMPARA CADENAS: Se puede simplificar usando (teclado.substring(0)=="a") y suprimiendo la variable (letra) y
                lo mismo con la variable (tamaño) usando (teclado.length()<5) pero así se entiende mejor.**/

            if(tamaño<5 && tamaño!=0){System.out.println("La cadena introducida tiene menos de 5 carácteres y comienza por \"a\".");}
            else if(tamaño>=5 && tamaño<=15 && tamaño!=0){System.out.println("La cadena introducida tiene entre 5 y 15 carácteres y comienza por \"a\".");}
            else if(tamaño>15 && tamaño!=0){System.out.println("La cadena introducida tiene más de 15 carácteres y comienza por \"a\".");}
            else{System.out.println("Error inesperado :-(");}

        }else if(tamaño<5 && tamaño!=0){System.out.println("La cadena introducida tiene menos de 5 carácteres y no comienza por \"a\".");}
        else if(tamaño>=5 && tamaño<=15 && tamaño!=0){System.out.println("La cadena introducida tiene entre 5 y 15 carácteres y no comienza por \"a\".");}
        else if(tamaño>15 && tamaño!=0){System.out.println("La cadena introducida tiene más de 15 carácteres y no comienza por \"a\".");}
        else{System.out.println("No has introducido nada :-(");}
    }/** Cierre main **/
}/** Cierre Clase **/
« Última modificación: 03 de Diciembre 2016, 17:08 por Ogramar »

pedro,,

  • Moderador Global
  • Experto
  • *******
  • APR2.COM
  • Mensajes: 1292
    • Ver Perfil
Re:Java. Comparar datos tipo String. CU00657B
« Respuesta #1 en: 24 de Noviembre 2016, 21:42 »
Hola DavidP83.

Lo primero pedirte que no coloques tus ejercicios en hilos del foro antiguos, porque posiblemente no encuentres respuesta a tus dudas, crea un nuevo hilo y de esta manera mantenemos los foros mas limpios.

Recomendarte leer el siguiente hilo:
https://www.aprenderaprogramar.com/foros/index.php?topic=1460.0

Y sobre tu problema, decirte que no se pueden comparar string de la forma que lo haces.
Esto no es válido:
Código: [Seleccionar]
letra=="a"
tendrías que hacerlo con el método equals():
Código: [Seleccionar]
letra.equals("a")
o para que no tenga en cuenta si está o no está mayúsculas el método equalsIgnoreCase():
Código: [Seleccionar]
letra.equalsIgnoreCase("a")
Saludos. ;D
« Última modificación: 24 de Noviembre 2016, 21:44 por pedro,, »

DavidP83

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 3
    • Ver Perfil
Re:Java. Comparar datos tipo String. CU00657B
« Respuesta #2 en: 25 de Noviembre 2016, 20:10 »
Gracias pedro,,

Solucionado. Ya lo había intentado con "letra.equals("a")" pero al llegar al tema del uso del debugger me he dado cuenta que también estaba usando mal "substring". Me ha venido muy bien que me muestres el uso del "letra.equals("a")".
    Perdón por no hacer esta consulta con un hilo nuevo, lo haré así en mi próxima duda.

Mil gracias.
« Última modificación: 25 de Noviembre 2016, 20:45 por DavidP83 »

DavidP83

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 3
    • Ver Perfil
Re:Java. Comparar datos tipo String. CU00657B
« Respuesta #3 en: 25 de Noviembre 2016, 20:52 »
Mi código terminado y funcional.
¡¡¡Que aproveche!!!  ;D
Código: [Seleccionar]
/**
 * EJERCICIO:
 *
 *  Crea una clase con un método main que pida una entrada de teclado y usando condicionales,
 * el método length de la clase String y el método substring de la clase String, muestre un mensaje indicando:
 *
 *      a) Si la cadena introducida tiene menos de 5 caracteres, entre 5 y 15 caracteres o más de 15 caracteres.
 *
 *      b) Si la cadena introducida comienza por la letra a.
 *
 * EJEMPLO:
 *
 *  Se pide la entrada y el usuario introduce “vereda”. Por pantalla se debe mostrar:
 *     “La cadena introducida tiene entre 5 y 15 carácteres y no comienza por a”
 **/

import java.lang.String;  /** Importa clase String para usar "length", "substring" y "equals" (No es necesario) **/
import java.util.Scanner; /** Importa clase Scanner para usar "nextLine"  (Es necesario)**/

public class IntroduceCadenaAnalizoCadena{
    public static void main(String[] args){
        /**ATRIBUTOS MAIN**/
        Scanner texto=new Scanner(System.in);
        String teclado="";
        String letra="";
        int tamaño=0;

        /** MENSAJE INSTRUCTIVO PARA EL USUARIO **/
        System.out.println("Introduce una cadena de caracteres.\nTe indicaremos si empieza por \"A\" o \"a\" y aproximadamente cuantos carácteres la compone.\nRecuerda: Los espacios y signos son caracteres.\nDAME UNA CADENA:");

        /** RECOGIDA POR TECLADO **/
        teclado=texto.nextLine();

        /** FUNCIÓN: Análisis y respuesta al usuario **/
        letra=teclado.substring(0,1);
        tamaño=teclado.length();
       
        if(letra.equalsIgnoreCase("a")){ /** COMPARA CADENAS SIN TOMAR EN CUENTA LAS MAYÚSCULAS NI MINÚSCULAS**/
   
            if(tamaño<5 && tamaño!=0){System.out.println("La cadena introducida tiene menos de 5 carácteres y comienza por \"a\".");}
            else if(tamaño>=5 && tamaño<=15 && tamaño!=0){System.out.println("La cadena introducida tiene entre 5 y 15 carácteres y comienza por \"a\".");}
            else if(tamaño>15 && tamaño!=0){System.out.println("La cadena introducida tiene más de 15 carácteres y comienza por \"a\".");}
            else{System.out.println("Error inesperado :-(");}

        }else if(tamaño<5 && tamaño!=0){System.out.println("La cadena introducida tiene menos de 5 carácteres y no comienza por \"a\".");}
        else if(tamaño>=5 && tamaño<=15 && tamaño!=0){System.out.println("La cadena introducida tiene entre 5 y 15 carácteres y no comienza por \"a\".");}
        else if(tamaño>15 && tamaño!=0){System.out.println("La cadena introducida tiene más de 15 carácteres y no comienza por \"a\".");}
        else{System.out.println("No has introducido nada :-(");}
    } /** CIERRE DEL MAIN **/
} /** CIERRE DE LA CLASE **/
« Última modificación: 25 de Noviembre 2016, 20:54 por DavidP83 »

pedro,,

  • Moderador Global
  • Experto
  • *******
  • APR2.COM
  • Mensajes: 1292
    • Ver Perfil
Re:Java. Comparar datos tipo String. CU00657B
« Respuesta #4 en: 25 de Noviembre 2016, 20:54 »
Prueba a cambiar esta línea:

Código: [Seleccionar]
letra=teclado.substring(0, 0);
por esta otra:

Código: [Seleccionar]
letra=teclado.substring(0, 1);
También recomendarte que no uses la letra "ñ" en nombres de variables, clases, métodos, etc., para evitar posibles errores.

Aquí te dejo un enlace con el ejercicio resuelto por si te sirve de ayuda:
https://www.aprenderaprogramar.com/foros/index.php?topic=2873.msg13102#msg13102

Saludos.

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".