Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado 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.
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);
}
}
-
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
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
-
Gracias por tomarte la molestia de revisar.
aquí nuevamente el código.
/**
* 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.
-
Hola jaivcaba
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
if(texto.substring(0,)=="a"{
pero tenés que usar doble comilla porque substring te devuelve un String
-
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.
/**
* 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.
-
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()
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
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
-
muchas gracias!