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: Erik_Escriche en 31 de Enero 2017, 12:47
-
Buenas a todos.
Esta es mi solución al ejercicio de la entrega CU00923C del curso Lenguaje de Programación Java Nivel Avanzado I.
Crea una clase denominada VerificadorVocales con un método capaz de recibir una cadena y una vocal y devolver un resultado que será 1 si el número de la vocal pasada como parámetro es par (hay equilibrio en esa vocal), -1 si el número de la vocal pasada como parámetro es impar (no hay equilibrio en esa vocal) ó 0 (no existe esa vocal en la cadena). Para ello debes utilizar una pila (Stack).
Crea una clase con el método main donde se pida al usuario una cadena y se le devuelva un mensaje informativo sobre si el números de a’s, e’s, i’s, o’s, u’s es par o impar. El programa debe dar opción al usuario a seguir introduciendo cadenas si lo desea.
Clase VerificadorVocales.
import java.util.Stack;
import java.util.Scanner;
public class VerificadorVocales {
public static void main (String [] args) {
Scanner entrada = new Scanner(System.in);
String respuesta = "S";
String cadena="";
String numeroA="";
String numeroE="";
String numeroI="";
String numeroO="";
String numeroU="";
while (respuesta.equalsIgnoreCase("S")){
System.out.println ("¿Qué cadena desea analizar?");
cadena=entrada.nextLine();
switch (analizarA(cadena)){
case 1: numeroA="par"; break;
case -1: numeroA="impar"; break;
case 0: numeroA= "cero"; break;
}
switch (analizarE(cadena)){
case 1: numeroE="par"; break;
case -1: numeroE="impar"; break;
case 0: numeroE= "cero"; break;
}
switch (analizarI(cadena)){
case 1: numeroI="par"; break;
case -1: numeroI="impar"; break;
case 0: numeroI= "cero"; break;
}
switch (analizarO(cadena)){
case 1: numeroO="par"; break;
case -1: numeroO="impar"; break;
case 0: numeroO= "cero"; break;
}
switch (analizarU(cadena)){
case 1: numeroU="par"; break;
case -1: numeroU="impar"; break;
case 0: numeroU= "cero"; break;
}
System.out.println ("El número de letras a es "+numeroA+", el número de letras e es "+numeroE+", el número de letras i es "+numeroI+", el número de letras o es "+numeroO+" y el número de letras u es "+numeroU+".");
System.out.print ("¿Desea analizar otra cadena? (S/N) ");
respuesta = entrada.nextLine();
}
}
public static int analizarA (String cadena) {
Stack<String> pila = new Stack<String>(); int i=0; int auxiliar=0;
while (i<cadena.length()) {
if (cadena.charAt(i)=='a'&&pila.empty()) {pila.push("a"); auxiliar++;}
else if (cadena.charAt(i)=='a'&&!pila.empty()) {pila.pop();}
i++;
}
if (auxiliar==0) {return 0;} else { if (pila.empty()) {return 1;} else {return -1;}}
}
public static int analizarE (String cadena) {
Stack<String> pila = new Stack<String>(); int i=0; int auxiliar=0;
while (i<cadena.length()) {
if (cadena.charAt(i)=='e'&&pila.empty()) {pila.push("e"); auxiliar++;}
else if (cadena.charAt(i)=='e'&&!pila.empty()) {pila.pop();}
i++;
}
if (auxiliar==0) {return 0;} else { if (pila.empty()) {return 1;} else {return -1;}}
}
public static int analizarI (String cadena) {
Stack<String> pila = new Stack<String>(); int i=0; int auxiliar=0;
while (i<cadena.length()) {
if (cadena.charAt(i)=='i'&&pila.empty()) {pila.push("i"); auxiliar++;}
else if (cadena.charAt(i)=='i'&&!pila.empty()) {pila.pop();}
i++;
}
if (auxiliar==0) {return 0;} else { if (pila.empty()) {return 1;} else {return -1;}}
}
public static int analizarO (String cadena) {
Stack<String> pila = new Stack<String>(); int i=0; int auxiliar=0;
while (i<cadena.length()) {
if (cadena.charAt(i)=='o'&&pila.empty()) {pila.push("o"); auxiliar++;}
else if (cadena.charAt(i)=='o'&&!pila.empty()) {pila.pop();}
i++;
}
if (auxiliar==0) {return 0;} else { if (pila.empty()) {return 1;} else {return -1;}}
}
public static int analizarU (String cadena) {
Stack<String> pila = new Stack<String>(); int i=0; int auxiliar=0;
while (i<cadena.length()) {
if (cadena.charAt(i)=='u'&&pila.empty()) {pila.push("u"); auxiliar++;}
else if (cadena.charAt(i)=='u'&&!pila.empty()) {pila.pop();}
i++;
}
if (auxiliar==0) {return 0;} else { if (pila.empty()) {return 1;} else {return -1;}}
}
}
Un saludo.
-
Buenas Erik el código funciona perfectamente. Como detalle de diseño veo que utilizas cinco métodos cuyo código es repetitivo (los métodos analaizarA, analizarE, analizarI, analizarO, analizarU).
Una mejora interesante sería unificar esos cinco métodos en uno solo que además de la cadena reciba el carácter a analizar, de esa forma nos ahorraríamos la repetición de código, quedando más compacto.
Salu2
-
¡Hola Ogramar!
Te agradezco mucho la observación. He estado pensando de nuevo el ejercicio y he unido los métodos en uno solo. También he modificado el main para que baste con un switch. El código se ha reducido notablemente. Ha quedado así:
import java.util.Stack;
import java.util.Scanner;
public class VerificadorVocales {
public static void main (String [] args) {
Scanner entrada = new Scanner(System.in);
String respuesta = "S";
String cadena="";
while (respuesta.equalsIgnoreCase("S")){
System.out.println ("¿Qué cadena desea analizar?");
cadena=entrada.nextLine();
String textoPorPantalla="";
char[] array = {'a','e','i','o','u'};
for (int i=0; i<array.length; i++) {
switch (analizarVocal(cadena,array[i])){
case 1: textoPorPantalla=textoPorPantalla+"El número de letras "+array[i]+" es par. "; break;
case -1: textoPorPantalla=textoPorPantalla+"El número de letras "+array[i]+" es impar. "; break;
case 0: textoPorPantalla=textoPorPantalla+"El número de letras "+array[i]+" es cero. "; break;
}
}
System.out.println (textoPorPantalla);
System.out.print ("¿Desea analizar otra cadena? (S/N) ");
respuesta = entrada.nextLine();
}
}
public static int analizarVocal (String cadena, char vocalParaAnalizar) {
Stack<String> pila = new Stack<String>(); char v=vocalParaAnalizar; String vocal=String.valueOf(vocalParaAnalizar);
int i=0; int auxiliar=0;
while (i<cadena.length()) {
if (Character.toLowerCase(cadena.charAt(i))==v&&pila.empty()) {pila.push(vocal); auxiliar++;}
else if (Character.toLowerCase(cadena.charAt(i))==v&&!pila.empty()) {pila.pop();}
i++;
}
if (auxiliar==0) {return 0;} else { if (pila.empty()) {return 1;} else {return -1;}}
}
}
De nuevo, muchas gracias por tus revisiones. Son siempre muy acertadas.
¡Un saludo!