Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: Lorenzo31 en 24 de Marzo 2015, 20:14
-
Buenas, entrego dos soluciones de este ejercicio.
La razón es porque en la primera queria comparar un substring con null o "vacio" y buscando no existe forma, lanza excepción cuando los parametros no están entre el tamaño del substring. Y planteé otra solución a esa.
Primera Solucion con Excepcion.
import java.util.Scanner;
public class Comparador{
public static void main (String[] args){
String palabra1; String palabra2; String comprobar;
int menorPalabra = 1; //por defecto la palabra menor es la 1era si el if no lo cambia se quedará así
int longitud = 0;
System.out.println("Introduce la primera palabra");
Scanner entrada1 = new Scanner(System.in);
palabra1 = entrada1.next(); //utilizo el next() para descartar los espacios solo coje primera palabra
System.out.println("Introduce la segunda palabra");
Scanner entrada2 = new Scanner(System.in);
palabra2 = entrada2.next();
// Compruebo si la palabra 2 es mas larga que la primera o no, para ponerlo en el bucle for como limite.
if(palabra2.length()> palabra1.length() ){
longitud = palabra2.length();
}else { longitud = palabra1.length();
menorPalabra = 2;}
//inicializa a 0 y recorre todos los valores hasta llegar a la longitud menos uno
for (int x = 0; x < longitud; x++){
try{
//if( palabra1.substring(x,x+1)!= null && palabra2.substring(x,x+1) != null ){
if(palabra1.substring(x,x+1).equals(palabra2.substring(x,x+1) ) ){
System.out.println("¿Letra " + (x+1) + " igual en las dos palabras? True");
}else{ System.out.println("¿Letra " + (x+1) + " igual en las dos palabras? False");}
// }
} catch (IndexOutOfBoundsException e) {
System.out.println("¿Letra " + (x+1) + " igual en las dos palabras? La palabra " +
menorPalabra + " no tiene letra " + (x+1));}
}
}
}
Segunda solución con dos Clases, main y una que analiza (para practicar llamar metodos de otra clase)
Clase main
import java.util.Scanner;
public class Comparador1{
public static void main (String[] args){
String palabra1; String palabra2;
System.out.println("Introduce la primera palabra");
Scanner entrada1 = new Scanner(System.in);
palabra1 = entrada1.next(); //con esta opcion me aseguro que solo recojo una palabra hasta un espacio
System.out.println("Introduce la segunda palabra");
Scanner entrada2 = new Scanner(System.in);
palabra2 = entrada2.next();
Analiza compara = new Analiza();
compara.checkPalabra(palabra1,palabra2);
}
}
Clase Analiza
public class Analiza{
public Analiza(){ //vacio
}
public void checkPalabra(String palabra1, String palabra2){
// cualMenor es un semáforo que es o 1 o 2 depende cual palabra sea la menor, por defecto se inicializa con 1.
int cualMenor = 1; int mayor; int menor;
if(palabra1.length() > palabra2.length() ){
cualMenor = 2;
mayor = palabra1.length();
menor = palabra2.length();
}else {
mayor = palabra2.length();
menor = palabra1.length();
}
for(int x = 0; x < mayor;){
while(x < menor){
if(palabra1.substring(x,x+1).equals(palabra2.substring(x,x+1)) ){
System.out.println("Letra " + (x+1) + " igual en las dos palabras: True");
}else{
System.out.println("Letra " + (x+1) + " igual en las dos palabras: False");
}
x++;
}
System.out.println("La palabra " + cualMenor + " no tiene letra " + (x+1));
x++;
}
}
}
-
Hola Lorenzo
Tus dos soluciones son correctas. OK.
Y en la segunda, ya estás usando la filosofía de Java. Un main director y las clases que realizan el trabajo.
Muy original capturar la excepción cuando una palabra es más corta para mostrar el mensaje adecuado.
Supongo que ya sabes que null y vacío no es lo mismo.
Null es que la variable no se ha inicializado, o se le ha quitado cualquier valor
vacio es, variable inicializada pero con un valor vacío.
Se puede trabajar con valores vacíos pero no con null
Saludos
-
Gracias Toni como siempre. Si he intentado usar filosofia Java, aunque poco elaborada jeje.
Si, conozco la diferencia (creo), "" vacio y null, desconocido, basicamente o indefinible.
Mi pregunta es, no es considerado chapucero usar las excepciones en tu favor digamos.. aunque en ese caso, no tenía otra solucion, a no ser replantear el ejercicio como hice en el segundo caso.
-
Hola Lorenzo
Las excepciones se suelen usar para controlar mediante código alternativo situaciones que el compilador no puede resolver por sí solo.
Un ejemplo típico es, la división por cero.
Tú siempre puedes usar los recursos de que dispones a tu buen entender. En este caso capturar la excepción particular que se da en tu código. Intentas leer un String más allá de su tamaño.
También puedes codificar sabiendo que ese 'error' ocurrirá con certeza.
Cosa que has hecho en el segundo ejercicio.
También has de saber que se codifica creando excepciones personalizadas. Por ejemplo una excepción que salte cuando un int esté fuera de un rango dado
Por lo tanto las excepciones trabajan para nosotros, no al revés.
Saludos