Foros aprenderaprogramar.com

Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: jaivcaba en 24 de Noviembre 2014, 08:21

Título: CU00657B Condiciones de longitud de cadena y primera letra ejemplo Scanner Java
Publicado por: jaivcaba en 24 de Noviembre 2014, 08:21
Hola

aquí el código
-Cualquier sugerencia sera cordialmente recibida-

De antemano, muchas gracias por comentar.



Código: [Seleccionar]
public class TestPrograma2
{
   
    public static void main (String [] args){
       
        System.out.println("introduzca texto");
        String texto = "";
        Scanner leerTexto = new Scanner (System.in);
        texto = leerTexto.nextLine();
        String condicionDice = "";
        char primeraLetra = texto.charAt(0);
       
        if (texto.length()< 5 && primeraLetra == 'a'){
            condicionDice= "tiene menos de 5 caracteres y comienza por a";
        }else{
         if (texto.length()<5 && primeraLetra != 'a'){
             condicionDice= "tiene menos de 5 caracteres pero no comienza en a";
            }else{
          if (texto.length()>=5 && texto.length() <=15 && primeraLetra =='a'){
               condicionDice= "tiene entre 5 y 15 caracteres y comienza por a";
            }else{
           if(texto.length()>=5 && texto.length() <=15 && primeraLetra !='a'){
                condicionDice= "tiene entre 5 y 15 caracteres y no comienza por a";
            }else{                       
            if (texto.length()>=15 && primeraLetra =='a'){
                  condicionDice= "tiene mas de 15 caracteres y comienza por a"; 
                }else{
             if (texto.length()>=15 && primeraLetra != 'a'){
                    condicionDice= "tiene mas de 15 caracteres y no comienza por a";
                }
            }
           }
          }
         }
        }
       System.out.println(condicionDice);
        }
}


Título: Re:CU00657B Condiciones de longitud de cadena y primera letra
Publicado por: toni_apr en 24 de Noviembre 2014, 20:13
Hola jaivcaba,
Tu ejercicio aun siendo funcional, te comento algunos detalles.

En primer lugar he tenido que importar la clase Scanner al principio de la clase, pues no venía.
Que quiere decir esto, que envías una clase que no has probado (sin la importación de Scanner esta clase no funciona)
Que has eliminado la sentencia de la importación de Scanner sin darte cuenta ¿?

Si bien el uso del método charAt es válido y lícito, en esta entrega se pide el uso del método substring
Está bien que uses el método que te parezca idóneo para hacer el trabajo. Pero en ese caso,  te sugiero que presentes el ejercicio tal como se pide (así demuestras que sabes hacerlo) y si quieres presentas tu versión modificada para que veamos otra forma de hacer el trabajo.

Tu ejercicio es un ejemplo perfecto del uso de if anidados (un if dentro de otro if).
El uso del if anidado tiene su utilidad cuando al cumplirse una condición, debemos tomar otra desición con otro if.
En este caso hay 6 sencencias if y 5 sentencias else.
Mira una versión usando if y else if

Código: [Seleccionar]
if (texto.length()< 5) {
    condicionDice = "tiene menos de 5 caracteres";
}   else if (texto.length()>=5 && texto.length() <=15) {
    condicionDice = "tiene entre 5 y 15 caracteres";
}   else {
    condicionDice= "tiene mas de 15 caracteres";
}

if (primeraLetra == 'a') {
    condicionDice += " y comienza por a";
}   else {
    condicionDice += " y no comienza por a";
}

En esta versión se usan 2 if, 1 else if y 2 else. Este código es más compacto, además es más facil de entender que el del if anidado.

Saludos
Título: Re:CU00657B Condiciones de longitud de cadena y primera letra ejemplo Scanner Java
Publicado por: jaivcaba en 26 de Noviembre 2014, 03:25

Gracias por tomarte la molestia de revisar. 

aquí nuevamente el código.

Código: [Seleccionar]
/**
 * Write a description of class TestPrograma2 here.
 *
 * @author (jaivcaba)
 * @version (25/11/2014)
 */
import java.util.Scanner;


public class TestPrograma3
{
   
    public static void main (String [] args){
       
        System.out.println("introduzca texto");
        String texto = "";
        Scanner leerTexto = new Scanner (System.in);
        texto = leerTexto.nextLine();
        String condicionDice = "";
       
       
       
        if (texto.length()< 5){
            condicionDice= "tiene menos de 5 caracteres";
        }else if (texto.length()>=5 && texto.length()<=15){
             condicionDice= "tiene entre 5 y 15 caracteres";
        }else if (texto.length()>=15){
               condicionDice= "tiene mas de 15 caracteres";}
               
        if (texto.substring(0,1).charAt(0) == 'a'){
            condicionDice+= " y comienza por a";
        }else{ condicionDice+= " y no comienza en a";
        }
                     
        System.out.println(condicionDice);
        }
}


la clase Scanner si estaba en el codigo original, solo que no seleccione el código completo al publicarlo, XD perdon por eso.

Cualquier comentario adicional sera bien recibido. 
Título: Re:CU00657B Condiciones de longitud de cadena y primera letra ejemplo Scanner Java
Publicado por: LPM en 26 de Noviembre 2014, 04:06
Hola jaivcaba

Código: [Seleccionar]
if (texto.substring(0,1).charAt(0) == 'a'){
Está bueno combinar 2 métodos en uno solo por así decir

Pero creo que substring(0,1) es casi lo mismo que hace chartAt(0), ambos toman el primer caracter de la cadena.

con substring(0,1) tomás el caracter inicial. como que de "hola" te queda "h". con eso ya podés iniciar bien el bucle

Código: [Seleccionar]
if(texto.substring(0,)=="a"{
pero tenés que usar doble comilla porque substring te devuelve un String
Título: Re:CU00657B Problema con la codicion letra "a" . AYUDA
Publicado por: jaivcaba en 27 de Noviembre 2014, 05:01
Hola ... tienes razón en lo que mencionas, de hecho yo también había pensado lo mismo, solo usar substring(0,1) == "a". Pero no funciona para las palabras que comienzan en "a" he intentado con diferentes maneras como substirng(0) == "a" y substring(1) == "a" entro otros y tampoco.


¿Podrían decirme en que estoy fallando?......... mil gracias de antemano.



Sin embargo .Aquí el código.

Código: [Seleccionar]
/**
 * Write a description of class TestPrograma2 here.
 *
 * @author (jaivcaba)
 * @version (25/11/2014)
 */
import java.util.Scanner;


public class TestPrograma3
{
   
    public static void main (String [] args){
       
        System.out.println("introduzca texto");
        String texto = "";
        Scanner leerTexto = new Scanner (System.in);
        texto = leerTexto.nextLine();
        String condicionDice = "";
       
       
       
        if (texto.length()< 5){
            condicionDice= "tiene menos de 5 caracteres";
        }else if (texto.length()>=5 && texto.length()<=15){
             condicionDice= "tiene entre 5 y 15 caracteres";
        }else if (texto.length()>=15){
               condicionDice= "tiene mas de 15 caracteres";}
               
        if (texto.substring(0,1) == "a"){
            condicionDice+= " y comienza por a";
        }else{ condicionDice+= " y no comienza en a";
        }
                     
        System.out.println(condicionDice);
        }
}


He visto que utilizan

if(texto.substring(0,1).equals("a"))

Se que funciona de esta manera, pero seria lo mismo que hice anteriormente de combinar dos métodos en uno solo, yo use.

if (texto.substring(0,1).charAt(0) == 'a')

y funciono.

¿Me pregunto si es necesario usar dos métodos para resolver el ejercicio y si es así, porque no funciona como esta en el presente código?


Gracias LPM y toni_apr por ayudarme. Cualquier comentario sera bien recibido

Saludos. 

Título: Re:CU00657B Condiciones de longitud de cadena y primera letra ejemplo Scanner Java
Publicado por: LPM en 27 de Noviembre 2014, 05:19
Pasa que el método substring te devuelve un valor tipo String, y String es un objeto

Por lo que tengo entendido, para comparar la igualdad entre objetos se usa .equals()

Código: [Seleccionar]
if (texto.substring(0,1).equals("a"))
al usar charAt te devuelve un valor tipo char, que es un tipo de dato primitivo, y para comparar la igualdad de un dato primitivo se usa ==
por eso es que al usar el método charAt y el operador == te resulta



Código: [Seleccionar]
if (texto.charAt(0)=='a')
la a está entre comillas simples, 'a'
con eso como que indicás que es un char.  comparás el char que devuelve charAt con el char 'a' usando ==

fijate también que si pones con doble comilla la a, te salta error, en que no se puede comparar entre tipo String y char. la "a" es String, 'a' es char


En una entrega del curso explica bien el == y el equals

http://aprenderaprogramar.com/index.php?option=com_content&view=article&id=628:el-metodo-equals-en-java-diferencia-entre-igualdad-e-identidad-comparar-objetos-ejemplos-cu00662b&catid=68:curso-aprender-programacion-java-desde-cero&Itemid=188
Título: Re:CU00657B Condiciones de longitud de cadena y primera letra ejemplo Scanner Java
Publicado por: jaivcaba en 30 de Noviembre 2014, 05:19
muchas gracias!