Hola. Presento ejercicio propuesto por César Krall "Moderador Global"
Una clase con main que usa dos clases accesorias "ManejadorDeVocales" y "ComparadorLetraALetra"
Ejercicio con el propósito de conducir el código a la Programación Orientada a Objetos.
Aquí envio 4 clases:
"Test2Texto"/**
* Detalles de la clase.
* Clase con método main
* @author (Toni)
* @version (0)
*/
public class Test2Texto {
// Atributos de la clase Test2Texto
//Constructor para objetos de la clase Test2Texto
public Test2Texto() {
// Inicializa atributos
} // Fin del constructor Test2Texto
// Siguen los setters para los atributos de la clase Test2Texto
// Ahora los getters para los atributos de la clase Test2Texto
// Y seguidamente, procedimientos y funciones varios.
public static void main (String [] args) {
System.out.println ("Este es un test para trabajar con cadenas de texto introducidas por teclado.");
String lectura = "";
do {
System.out.println ("Hay dos test disponibles. Escoja un número por favor:\n\t" +
"1. Comparar dos cadenas letra a letra.\n\t2. Contar caracteres dentro de una frase.\n\tPulsar (ENTER) para terminar.");
lectura = entradaATexto();
if (lectura.length() == 0) {
// saliendo
} else if (lectura.substring(0,1).equals("1")) {
miComparador();
} else if (lectura.substring(0,1).equals("2")) {
miContador();
} else {
System.out.println ("Opción inválida. Escoja otra vez por favor.");
}
} while (lectura.length() > 0);
System.out.println ("\tFinalizado el test múltiple.");
}// fin del main
private static void miContador() {
System.out.println ("Introducir el texto a inspeccionar.");
String lectura = entradaATexto();
ManejadorDeVocales texto = new ManejadorDeVocales(lectura);
do {
System.out.println ("\tPara ver las estadísticas del texto, pulsar:\n" +
"Una tecla cualquiera, \" \" (espacio) para ver toda la información recopilada, o (ENTER) para terminar.");
lectura = entradaATexto();
if (lectura.length() == 0) {
//salir
} else {
if (!lectura.substring(0,1).equals(" ")) {texto.setCaracterVar(lectura); }
texto.estadisticaLetras (lectura); // muestra estadísticas
}
} while (lectura.length() > 0);
System.out.println ("Finalización de la consulta de caracteres para la frase:\n\t\"" + texto.getTexto() + "\"");
}// fin de miContador
private static void miComparador() {
String lectura = "", entrada1 = "", entrada2 = "";
boolean repetir = false;
System.out.println ("Vamos a comparar dos cadenas de texto letra a letra.");
do {
System.out.println ("Introduzca la primera cadena, por favor.");
lectura = entradaATexto();
if (lectura.length() == 0) {
repetir = true;
System.out.println ("La entrada introducida no tiene contenido. Debe introducir algún texto.");
} else {
entrada1 = lectura;
repetir = false;
}
} while (repetir);
do {
System.out.println ("Introduzca la segunda cadena, por favor.");
lectura = entradaATexto();
if (lectura.length() == 0) {
repetir = true;
System.out.println ("Entrada vacía. Debe introducir algún texto. Se pueden comparar cadenas vacías, pero no es divertido.");
}else {
entrada2 = lectura;
repetir = false;
}
} while (repetir);
ComparadorLetraALetra comparaYa = new ComparadorLetraALetra(entrada1, entrada2);
comparaYa.resultadoDeLaComparacion();
System.out.println ("\tFinalizada la comparación, vamos a otra cosa.");
}
private static String entradaATexto() {
EntradaDeTeclado entrada = new EntradaDeTeclado();
return entrada.getEntrada();
}
} // Fin de la clase Test2Texto
"ManejadorDeVocales"/**
* Detalles de la clase.
* Destripa el texto aportado en vocales, pulsación variable y resto de caracteres.
* @author (Toni)
* @version (0)
*/
public class ManejadorDeVocales {
// Atributos de la clase ManejadorDeVocales
private int numA, numE, numI, numO, numU, numVocales;
private int numVar, numResto, numTotal;
private String caracterVar;
private String texto;
//Constructor para objetos de la clase ManejadorDeVocales
public ManejadorDeVocales(String texto) {
// Inicializa atributos
numA = 0; numE = 0; numI = 0; numO = 0; numU = 0; numVocales = 0;
numVar = 0; numResto = 0;
this.texto = texto;
caracterVar = " ";
numTotal = texto.length();
cuentaLetras();
} // Fin del constructor ManejadorDeVocales
// Siguen los setters para los atributos de la clase ManejadorDeVocales
/**
* Establece el texto a manejar.
*/
public void setTexto (String texto) {
this.texto = texto;
cuentaLetras();
}
/**
* Método para establecer el carácter a inspeccionar.
*/
public void setCaracterVar (String caracterVar) {
this.caracterVar = caracterVar;
cuentaLetras();
}
// Ahora los getters para los atributos de la clase ManejadorDeVocales
public String getCaracterVar () { return caracterVar; }
public String getTexto () { return texto; }
public int getNumA () { return numA; }
public int getNumE () { return numE; }
public int getNumI () { return numI; }
public int getNumO () { return numO; }
public int getNumU () { return numU; }
public int getNumVocales () { return numVocales; }
public int getNumVar () { return numVar; }
public int getNumResto () { return numResto; }
public int getNumTotal () { return numTotal; }
// Y seguidamente, procedimientos y funciones varios.
/**
* Médoto contador de letras.
*/
private void cuentaLetras () {
String letra = "";
inicializaContadores();
for (int i = 0; i < numTotal; i++) {
letra = texto.substring(i,i+1).toUpperCase();
if (letra.equals("A")) {
numA ++; numVocales ++;
} else if (letra.equals("E")) {
numE ++; numVocales ++;
} else if (letra.equals("I")) {
numI ++; numVocales ++;
} else if (letra.equals("O")) {
numO ++; numVocales ++;
} else if (letra.equals("U")) {
numU ++; numVocales ++;
} else if (letra.equals(caracterVar.substring(0,1).toUpperCase())) {
numVar ++;
} else {
numResto ++;
}// fin del if
}//fin del for
}//fin del cuentaLetras
/**
* Método para presentar resultados estadísticos...
*/
public void estadisticaLetras(String valor) {
if (valor.substring(0,1).toUpperCase().equals("A")) {//detecta la A
grafismo("A");
System.out.println ("Vocal A = \t" + numA + " veces. \t" + perCent(numA) + "%");
} else if (valor.substring(0,1).toUpperCase().equals("E")) {//detecta la E
grafismo("E");
System.out.println ("Vocal E = \t" + numE + " veces. \t" + perCent(numE) + "%");
} else if (valor.substring(0,1).toUpperCase().equals("I")) {//detecta la I
grafismo("I");
System.out.println ("Vocal I = \t" + numI + " veces. \t" + perCent(numI) + "%");
} else if (valor.substring(0,1).toUpperCase().equals("O")) {//detecta la O
grafismo("O");
System.out.println ("Vocal O = \t" + numO + " veces. \t" + perCent(numO) + "%");
} else if (valor.substring(0,1).toUpperCase().equals("U")) {//detecta la U
grafismo("U");
System.out.println ("Vocal U = \t" + numU + " veces. \t" + perCent(numU) + "%");
} else if (valor.substring(0,1).equals(" ")) {
if (numA > 0) { System.out.println ("Vocal A = \t" + numA + " veces. \t" + perCent(numA) + "%"); }
if (numE > 0) { System.out.println ("Vocal E = \t" + numE + " veces. \t" + perCent(numE) + "%"); }
if (numI > 0) { System.out.println ("Vocal I = \t" + numI + " veces. \t" + perCent(numI) + "%"); }
if (numO > 0) { System.out.println ("Vocal O = \t" + numO + " veces. \t" + perCent(numO) + "%"); }
if (numU > 0) { System.out.println ("Vocal U = \t" + numU + " veces. \t" + perCent(numU) + "%"); }
System.out.println ("Suma vocales = \t" + numVocales + " letras. \t" + perCent(numVocales) + "%");
if (numVar > 0) { System.out.println ("Tecla \"" + caracterVar.substring(0,1) + "\" = \t" + numVar + " veces. \t" + perCent(numVar) + "%"); }
System.out.println ("Resto letras = \t" + numResto + " letras. \t" + perCent(numResto) + "%");
System.out.println ("Total = \t" + numTotal + " letras. \t" + perCent(numTotal) + "%");
} else {
grafismo(caracterVar.toUpperCase().substring(0,1));
System.out.println ("Tecla \"" + caracterVar.substring(0,1) + "\" = \t" + numVar + " veces. \t" + perCent(numVar) + "%");
}//fin del if
}// fin de estadisticas
// porcentaje de los valores.
private double perCent(int valor) {
return (double)(valor * 1000 / numTotal) / 10;
}
private void inicializaContadores() {
numA = 0; numE = 0; numI = 0; numO = 0; numU = 0; numVocales = 0;
numVar = 0; numResto = 0;
}
// Este método muestra gráficamente la aparición del carácter inspeccionado.
private void grafismo(String letra) {
System.out.println (texto);
String caracter = "";
for (int i = 0; i < texto.length(); i++) {
caracter = "-";
if (texto.substring(i,i+1).toUpperCase().equals(letra)) { caracter = "|"; }
System.out.print (caracter);
}
System.out.println();
}
} // Fin de la clase ManejadorDeVocales
"ComparadorLetraALetra"// import java.util.Scanner;
/**
* Detalles de la clase.
* Pide dos entradas, y compara letra por letra si son iguales o no.
* @author (Toni)
* @version (0)
*/
public class ComparadorLetraALetra {
// Atributos de la clase ComparadorLetraALetra
private String cadena1;
private String cadena2;
/**
* Constructor para objetos de la clase ComparadorLetraALetra
*/
public ComparadorLetraALetra(String cadena1, String cadena2) {
// Inicializa atributos
this.cadena1 = cadena1;
this.cadena2 = cadena2;
} // Fin del constructor ComparadorLetraALetra
// Siguen los setters para los atributos de la clase ComparadorLetraALetra
public void setCadena1 (String cadena1) { this.cadena1 = cadena1; }
public void setCadena2 (String cadena2) { this.cadena2 = cadena2; }
// Ahora los getters para los atributos de la clase ComparadorLetraALetra
public String getCadena1 () { return cadena1; }
public String getCadena2 () { return cadena2; }
// Y seguidamente, procedimientos y funciones varios.
/**
* Método estrella. Presenta analogías y diferencias carácter a carácter.
*/
public void resultadoDeLaComparacion () {
System.out.println ("Vamos a comparar las entradas:\n\t" +
"1 " + cadena1 + "\t y \t 2 " + cadena2);
int largoMax = 0;//longitud de la entrada más larga
int largo1 = cadena1.length();//longitud de la entrada1
int largo2 = cadena2.length();//longitud de la enttrada2
if (largo1 > largo2) {
largoMax = largo1;
} else {
largoMax = largo2;
}//se actualiza largoMax
int porcion1 = 0, porcion2 = 0;//porción de las entradas que se va a mostrar
for (int i = 0; i < largoMax; i++){
if (i < largo1) { porcion1 = i+1;}//actualiza la porción a mostrar
if (i < largo2) { porcion2 = i+1;}
System.out.println ("\n¿La letra " + (i+1) + " es igual en las dos entradas?");
System.out.print ("\t1 -" + cadena1.substring(0,porcion1) + "-\t2 -" +
cadena2.substring(0,porcion2) + "-\nRespuesta " + (i+1) + ": ");//muestra las dos porciones
if (largo1 < i+1) {
System.out.println ("La entrada 1 no tiene letra " + (i+1));
} else if (largo2 < i+1) {
System.out.println ("La entrada 2 no tiene letra " + (i+1));
} else {
if (cadena1.substring(i,i+1).equals(cadena2.substring(i,i+1))) {
System.out.println ("True.");
} else {
System.out.println ("False.");
}// fin del if anidado
}//fin del if
}//fin del for
System.out.println ("\nFin de la comparación.");
}// fin de resultado
} // Fin de la clase ComparadorLetraALetra
y "EntradaDeTeclado"import java.util.Scanner; //Importación del código de la clase Scanner desde la biblioteca Java
// Definimos una clase EntradaDeTeclado
/**
* Detalles de la clase.
*
* @author (Toni)
* @version (0)
*/
public class EntradaDeTeclado {
// Atributos de la clase EntradaDeTeclado
private String entradaTeclado;
/**
* Constructor para objetos de la clase EntradaDeTeclado
*/
public EntradaDeTeclado() {
// Inicializa atributos
entradaTeclado = "";
pedirEntrada();
} // Fin del constructor EntradaDeTeclado
// Siguen los setters para los atributos de la clase EntradaDeTeclado
// Ahora los getters para los atributos de la clase EntradaDeTeclado
// Y seguidamente, procedimientos y funciones varios.
public void pedirEntrada() {
Scanner entradaEscaner = new Scanner(System.in);
entradaTeclado = entradaEscaner.nextLine();
}
/**
* Método predilecto. Devuelve el texto introducido por teclado.
*/
public String getEntrada() { return entradaTeclado; }
public int getLongitud() {
return entradaTeclado.length();
}// fin dle método
} // Fin de la clase EntradaDeTeclado
Saludos.