Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: el_calderas en 16 de Febrero 2015, 15:40
-
Hola, este es el primer codigo que subo al foro.
Agradeceria cualquier comentario, consejo o correción que veais.
Un saludo.
import java.util.Scanner;
public class TextEquals
{
public static void main(String[]args){
String text1="";
String text2="";
System.out.println("Introduce primer texto");
Scanner imput1=new Scanner(System.in);
text1=imput1.nextLine();
System.out.println("Introduce segundo texto");
Scanner imput2=new Scanner(System.in);
text2=imput2.nextLine();
if(text1.length()>text2.length()){
int i=0;
while(i<text2.length()){
if(text1.substring(i,i+1).equals(text2.substring(i,i+1))){
System.out.println("¿Letra "+ (i+1) +" igual en las dos palabras? Cierto");
}else{
System.out.println("¿Letra "+ (i+1) +" igual en las dos palabras? falso");
}
i++;
}
for(;i<text1.length();i++){
System.out.println("La palabra 2 no tiene letra "+ (i+1));
}
}else if(text1.length()<text2.length()){
int i=0;
while(i<text1.length()){
if(text1.substring(i,i+1).equals(text2.substring(i,i+1))){
System.out.println("¿Letra "+ (i+1) +" igual en las dos palabras? Cierto");
}else{
System.out.println("¿Letra "+ (i+1) +" igual en las dos palabras? falso");
}
i++;
}
for(;i<text2.length();i++){
System.out.println("La palabra 1 no tiene letra "+ (i+1));
}
}else{
for(int i=0;i<text2.length();i++){
if(text1.substring(i,i+1).equals(text2.substring(i,i+1))){
System.out.println("¿Letra "+ (i+1) +" igual en las dos palabras? Cierto");
}else{
System.out.println("¿Letra "+ (i+1) +" igual en las dos palabras? falso");
}
}
}
}
}
-
Hola! El código está bien planteado y bien estructurado. A modo de ejercicio te propongo que lo mejores de la siguiente manera: en lugar del código para if(text1.length()>text2.length()), else if(text1.length()<text2.length()), que resulta repetitivo, intentar analizar cuál es la palabra más larga y cuál es la más corta y almacenarlas en Strings temporales, de modo que tengas un solo bucle while. De ese modo, el código quedaría en menos líneas y si podemos hacer lo mismo con menos líneas, mejor. Saludos!
-
Hola, gracias por el consejo.
¿Asi estaría correcto?, por que tengo una duda...
import java.util.Scanner;
public class TextEquals2
{
public static void main(String[]args){
String text1="";
String text2="";
String textLarge="";
String textShort="";
int x=0;
System.out.println("Introduce primer texto");
Scanner imput1=new Scanner(System.in);
text1=imput1.nextLine();
System.out.println("Introduce segundo texto");
Scanner imput2=new Scanner(System.in);
text2=imput2.nextLine();
if(text1.length()>text2.length()){
textLarge=text1;
textShort=text2;
x=2;
}else if(text1.length()<text2.length()){
textLarge=text2;
textShort=text1;
x=1;
}
if (text1.length()==text2.length()){
for(int i=0;i<text2.length();i++){
if(text1.substring(i,i+1).equals(text2.substring(i,i+1))){
System.out.println("¿Letra "+ (i+1) +" igual en las dos palabras? Cierto");
}else{
System.out.println("¿Letra "+ (i+1) +" igual en las dos palabras? falso");
}
}
}else{
int i=0;
while(i<textShort.length()){
if(text1.substring(i,i+1).equals(text2.substring(i,i+1))){
System.out.println("¿Letra "+ (i+1) +" igual en las dos palabras? Cierto");
}else{
System.out.println("¿Letra "+ (i+1) +" igual en las dos palabras? falso");
}
i++;
}
for(;i<textLarge.length();i++){
System.out.println("La palabra "+ x +" no tiene letra "+ (i+1));
}
}
}
}
Mi duda es: ¿es correcto hacer la inicialización de los atributos text1, text2, textLarge, textShort y x, fuera de un constructor, donde es por definición donde se inicializan?
Gracias.
-
Sí, es correcto. text1, text2, textLarge, textShort y x no son atributos de la clase, son variables locales al método main. Las variables locales son variables que usas dentro de un método "según tengas necesidad", no hay problema siempre que mantengas una lógica. Creo que todavía podrías acortar más el código si en vez de la comparación if (text1.length()==text2.length()) usas una comparación basada en textLarge y textShort. Creo que podrías simplemente extraer todas las letras del texto largo hasta la longitud del texto corto (un bucle) y si el texto largo tiene más letras, mostrar el mensaje de que no se pueden comparar esas letras. De todas formas no te preocupes, sigue avanzando. Saludos!