Foros aprenderaprogramar.com

Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: @mayakoski en 25 de Agosto 2019, 07:08

Título: método equals java comparar objetos diferencia igualdad identidad ej. CU00662B
Publicado 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.

Código: [Seleccionar]
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;
}
}
Título: Re:CU00662B metodo equals java comparar objetos diferencia igualdad identidad, ej.
Publicado por: DRANXZ88 en 29 de Agosto 2019, 19:33
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

 
Código: [Seleccionar]
System.out.println("¿Letra " + (i + 1) + " igual en las dos palabras? True.");

directamente podias hacer así

Código: [Seleccionar]
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:

Código: [Seleccionar]
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.
Título: Re:CU00662B metodo equals java comparar objetos diferencia igualdad identidad, ej.
Publicado por: @mayakoski en 03 de Septiembre 2019, 02:18
Gracias las observaciones, he hecho los cambios tratando de cumplir lo recomendado

Código: [Seleccionar]
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());
}
}

Código: [Seleccionar]
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;
}
}


Código: [Seleccionar]
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;
}
}
}