Foros aprenderaprogramar.com
Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: xBag en 25 de Noviembre 2014, 03:11
-
Hola muchachones! ;D
Tenía días sin postear es porque me ha servido bastante el curso y he aprendido algunas cositas. Gracias a la comunidad y a los que se encargan de preparar la enseñanza.
Lo que traigo ahora es un ejercicio que dice así:
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 caracteres y no comienza por a”.
Yo hice mi código el programa me funciona solo quería que lo vieran y me digan qué les parece. Llevo 1 mes en Java, creen que para ese tiempo voy bien? Bueno ahí les dejo y me avisan.
import java.util.Scanner;
public class Vereda {
public static void main (String [] args){
String PalabraEscrita ="";
int i;
for (i=0;i<10;i++){
System.out.println("Introduzca la palabra");
Scanner palabra = new Scanner(System.in);
PalabraEscrita = palabra.nextLine();
System.out.println("La palabra \"" + PalabraEscrita + "\" " + "ha sido introducida");
int Largo = PalabraEscrita.length();
PalabraEscrita = PalabraEscrita.toUpperCase();
boolean Inicio = PalabraEscrita.startsWith("A");
if (Largo<5 && Inicio==true){System.out.println("Tiene menos de 5 caracteres y empieza por la letra A");
}else if (Largo<5 && Inicio==false){System.out.println("Tiene menos de 5 caracteres y NO empieza por la letra A");
}else if (Largo<=15 && Inicio==true){System.out.println("Tiene entre 5 y 15 caracteres y empieza por la letra A");
}else if (Largo<=15 && Inicio==false){System.out.println("Tiene entre 5 y 15 caracteres y NO empieza por la letra A");
}else if (Largo>15 && Inicio==true){System.out.println("Tiene más de 15 caracteres y empieza por la letra A");
}else if (Largo>15 && Inicio==false){System.out.println("Tiene más de 15 caracteres y NO empieza por la letra A");
}
}
}
}
NOTA: Me surgió la duda, puedo hacer que el programa SE DETENGA, en caso de que durante el "For", en la pregunta 3 o 4 o cual sea, yo escriba "Salir" ? Lo intenté y fracasé alguien me ayuda? Tengo curiosidad y quisiera aprender. Gracias de antemano.
Saludos!
-
Hola xBag!
Con relación a lo que pide el enunciado del ejercicio te comento que aunque tu programa realiza la tarea requerida, no has cumplido del todo lo que se pide en el enunciado del ejercicio, no has usado el método substring y en su lugar has usado el método startsWith. No es que esto este mal pero aparte de que no cumples del todo con el ejercicio, el método substring el cual no usas es muy útil para este ejercicio y mas adelante te mostrare como usarlo para aumentar la eficiencia de tu programa.
Con relación a tu código en general, te comento lo siguiente.
El nombre de la clase no es muy apropiado, el nombre de una clase debe de ser descriptivo de lo que es o lo que hace. Aunque tal vez solo elegiste un nombre para tu clase sin pensar en esto, es bueno que tengas esto presente siempre que estés buscando un nombre para una clase.
En el método main, tienes la variable local PalabraEscrita (y todas las demás variables), el nombre de una variable debe de comenzar preferiblemente con letra minúscula, (palabraEscrita) aunque esto no afecta la funcionalidad del código, si estas usando un standar de programación entre programadores que han convenido que esto debe de ser así en todo código java.
Con relación a tu duda: Me surgió la duda, puedo hacer que el programa SE DETENGA, en caso de que durante el "For", en la pregunta 3 o 4 o cual sea, yo escriba "Salir" ? Lo intenté y fracasé alguien me ayuda?
Para tu bucle finalizar es necesario que la variable i alcance un valor mayor a 10, para lograr lo que quieres bastaría con igualar el valor de i a (un numero mayor que 10) 11 mediante un condicional if usando como condición que el valor de la variable palabraEscrita sea igual a el String "Salir".
A continuación dejo un nuevo código creado a partir de tu clase Vereda, con comentarios incluidos en cada cambio y/o mejora.
import java.util.Scanner;
public class AnalizarPalabra
{
public static void main (String [] args)
{
String palabraEscrita = "";
for (int i=0;i<10;i++){//Indicamos el tipo dinámico (int) de i en el mismo bucle for
System.out.println("Introduzca una palabra: ");
Scanner palabra = new Scanner(System.in);
palabraEscrita = palabra.next();
if(!palabraEscrita.equals("salir"))//El operador ! antes de la condición, niega el valor de esta, se leería: Si la palabra escrita NO ES IGUAL a salir.
{
System.out.println("La palabra \"" + palabraEscrita + "\" " + "ha sido introducida");
}
int largo = palabraEscrita.length();
boolean inicio = false;
if(palabraEscrita.substring(0,1).equalsIgnoreCase("a")){inicio = true;}/*Usamos el método subString para analizar la primera letra de la palabra escrita
y usamos el método equalsIgnoreCase(String str); para que el programa ignore diferencia de mayúsculas y minúsculas ("a" o "A")*/
if(palabraEscrita.equals("salir"))//Este condicional finalizaría el bucle en caso de cumplirse, puesto que asignara a "i" un valor mayor que 10.
{
i += 11; System.out.println("\fPrograma finalizado...");//Usar el operador += en esta linea es lo mismo que decir: i = i + 11;
}
else if (largo<5 && inicio){System.out.println("Tiene menos de 5 caracteres y empieza por la letra: " + palabraEscrita.substring(0,1));/*Extraemos
la primera letra de la palabra escrita, podria ser "a" o "A"*/
}else if (largo<5 && !inicio){System.out.println("Tiene menos de 5 caracteres y NO empieza por la letra a/A");//Usamos el operador ! en lugar de == false/true
}else if (largo<=15 && inicio){System.out.println("Tiene entre 5 y 15 caracteres y empieza por la letra: " + palabraEscrita.substring(0,1));
}else if (largo<=15 && !inicio){System.out.println("Tiene entre 5 y 15 caracteres y NO empieza por la letra a/A");
}else if (largo>15 && inicio){System.out.println("Tiene más de 15 caracteres y empieza por la letra: " + palabraEscrita.substring(0,1));
}else if (largo>15 && !inicio){System.out.println("Tiene más de 15 caracteres y NO empieza por la letra a/A");
}
}
}
}
Espero que encuentres algo útil.
Saludos!
-
MIL GRACIAS!