Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: @mayakoski en 25 de Agosto 2019, 07:08
-
Solución propuesta para el ejercicio CU00662B del tutorial pdf de programación Java desde cero de aprenderaprogramar.
package com.aprenderaprogramar;
import java.util.Scanner;
public class CadenaComparar {
private String entrada;
public static void main(String[] args) {
System.out.println("Ingrese primera palabra");
CadenaComparar entrada1 = new CadenaComparar();
System.out.println("Ingrese segunda palabra");
CadenaComparar entrada2 = new CadenaComparar();
Comparacion(entrada1.getEntrada(), entrada2.getEntrada());
}
public CadenaComparar() {
pedirEntrada();
}
public void pedirEntrada() {
Scanner entradaTeclado1 = new Scanner(System.in);
setEntrada(entradaTeclado1.nextLine());
}
public static void Comparacion(String pEntrada1, String pEntrada2) {
int maxI, minI, numEntrada, i = 0;
if (pEntrada1.length() > pEntrada2.length()) {
maxI = pEntrada1.length();
minI = pEntrada2.length();
numEntrada = 2;
} else {
maxI = pEntrada2.length();
minI = pEntrada1.length();
numEntrada = 1;
}
while (i < maxI) {
if (i < minI && pEntrada1.substring(i, i + 1).equals(pEntrada2.substring(i, i + 1))) {
System.out.println("¿Letra " + (i + 1) + " igual en las dos palabras? True.");
} else if (i < minI) {
System.out.println("¿Letra " + (i + 1) + " igual en las dos palabras? False.");
} else {
System.out.println("¿Letra " + (i + 1) + " igual en las dos palabras? La palabra " + numEntrada
+ " no tiene letra " + (i + 1));
}
i += 1;
}
}
public String getEntrada() {
return entrada;
}
public void setEntrada(String entrada) {
this.entrada = entrada;
}
}
-
El ejercicio muestra el resultado como pide pero se podría mejorar.
La comparación con equals te da luego como resultado false o true dependiendo si es idéntico o no. En vez de imprimir
System.out.println("¿Letra " + (i + 1) + " igual en las dos palabras? True.");
directamente podias hacer así
System.out.println("¿Letra " + (i + 1) + " igual en las dos palabras? " + (pEntrada1.substring(i, i + 1).equals(pEntrada2.substring(i, i + 1))));
Así el código sería más compacto y usarías menos lineas. Quedaría:
while (i < maxI) {
if (i < minI) {
System.out.println("¿Letra " + (i + 1) + " igual en las dos palabras? " + (pEntrada1.substring(i, i + 1).equals(pEntrada2.substring(i, i + 1))));
} else {
System.out.println("La palabra " + numEntrada + " no tiene letra " + (i + 1));
}
i += 1;
}
Aunque podías usar for también pero ya eso es opcional.
Otra cosa: es recomendable dividir en clases y no poner todo dentro de la clase principal main ya que dentro del principal si es posible no tiene que ir nada calculado.
Ejemplo: podías crear una clase GestionarEntradaTeclado que se encargaría de gestionar el teclado y otra clase que se encargaría sobre gestionar la comparación del los ingresados.
-
Gracias las observaciones, he hecho los cambios tratando de cumplir lo recomendado
package com.aprenderaprogramar;
import java.util.Scanner;
public class CadenaComparar {
public static void main(String[] args) {
System.out.println("Ingrese primera palabra");
GestionarEntrada entrada1 = new GestionarEntrada();
System.out.println("Ingrese segunda palabra");
GestionarEntrada entrada2 = new GestionarEntrada();
RealizaComparacion.Comparacion(entrada1.getEntrada(), entrada2.getEntrada());
}
}
package com.aprenderaprogramar;
import java.util.Scanner;
public class GestionarEntrada {
private String entrada;
public GestionarEntrada() {
pedirEntrada();
getEntrada();
}
public void pedirEntrada() {
Scanner entradaTeclado1 = new Scanner(System.in);
setEntrada(entradaTeclado1.nextLine());
}
public String getEntrada() {
return entrada;
}
public void setEntrada(String entrada) {
this.entrada = entrada;
}
}
package com.aprenderaprogramar;
public class RealizaComparacion {
public RealizaComparacion() {
}
public static void Comparacion(String pEntrada1, String pEntrada2) {
int maxI, minI, numEntrada, i = 0;
if (pEntrada1.length() > pEntrada2.length()) {
maxI = pEntrada1.length();
minI = pEntrada2.length();
numEntrada = 2;
} else {
maxI = pEntrada2.length();
minI = pEntrada1.length();
numEntrada = 1;
}
while (i < maxI) {
if (i < minI ) {
System.out.println("¿Letra " + (i + 1) + " igual en las dos palabras? " + (pEntrada1.substring(i, i + 1).equals(pEntrada2.substring(i, i + 1))));
} else {
System.out.println("La palabra " + numEntrada + " no tiene letra " + (i + 1));
}
i += 1;
}
}
}