Java - Anagrama java

   
Vista:

Anagrama java

Publicado por AndresZapata (3 intervenciones) el 09/11/2011 14:19:35
Muy buenas a todos.

Tengo la siguiente clase anagrama en java, pero hay algo que no esta funcionando bien aun y no he podido encontrar el "chiste". Espero me puedan ayudar. De ante mano muchisimas gracias a toda la ayuda prestada.

La finalidad es la siguiente. solicitar dos palabras y verificar si ambas son anagramas.
Todo esta casi hecho, salvo la parte de verificar lo de anagrama.
Pongo todo el codigo a disposicion:

public class Anagrama
{
// instance variables - replace the example below with your own
private String palabra1;
private String palabra2;

/**
* Constructor for objects of class Anagrama
*/
public Anagrama()
{
// initialise instance variables
palabra1 = new String();
palabra2 = new String();
}

public void ponerPalabra1(String p)
{
palabra1 = p;
}

public String verificarPalabra1()
{
return(palabra1);
}

public void ponerPalabra2(String p2)
{
palabra2 = p2;
}

public String verificarPalabra2()
{
return(palabra2);
}

public boolean verificarAnagrama()
{
int tPalabra1 = palabra1.length();
int tPalabra2 = palabra2.length();
int cont = 0;
boolean salida = false;

if (tPalabra1 == tPalabra2){
for (int i=0; i<=(tPalabra1 - 1); i++){
for (int j=0; j<=(tPalabra1 - 1); j++){
if (palabra1.charAt(i) == palabra2.charAt(j)){
palabra2.charAt(j) = 0;
cont=cont+1;
j=tPalabra1+1;
}
}
}
if (cont == tPalabra1);
salida = true;
}
else{
salida = false;
}
return(salida);
}
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Anagrama java

Publicado por Renzo nevermindman@gmail.com (125 intervenciones) el 09/11/2011 17:49:36
Hola Andres,

yo reemplazaria este bloque de codigo:


///////////////////////////
if (tPalabra1 == tPalabra2){
for (int i=0; i<=(tPalabra1 - 1); i++){
for (int j=0; j<=(tPalabra1 - 1); j++){
if (palabra1.charAt(i) == palabra2.charAt(j)){
palabra2.charAt(j) = 0;
cont=cont+1;
j=tPalabra1+1;
}
}
}
if (cont == tPalabra1);
salida = true;
}
///////////////////////////



por este otro


///////////////////////////
char[] arr1=palabra1.toCharArray();
char[] arr2=palabra2.toCharArray();
ordena(arr1, arr2);
if (tPalabra1 == tPalabra2) {
salida=true;
for (int i = 0; i <tPalabra1; i++) {
if(arr1[i]!=arr2[i]){
salida=true;
break;
}
}

}

///////////////////////////

y agrego el siguiente metodo a tu clase

///////////////////////////
public static void ordena(char []a,char []b){
for(int i=a.length-1;i>0;i--){
for(int j=0;j<i;j++){
if(a[j]>a[j+1]){
char temp=a[j];
char temp2=b[j];
a[j]=a[j+1];
b[j]=b[j+1];
a[j+1]=temp;
b[j+1]=temp2;
}
}

}

}
///////////////////////////


Espero haberte ayudado

Te invito a visitar mi web: http://www.imagineanddo.com
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Anagrama java

Publicado por AndresZapata (3 intervenciones) el 09/11/2011 18:32:52
Gracias por la respuesta.

Solo una duda, para que se crearia exactamente el nuevo metodo ordernar???
Es necesario, y se puede omitir??? o es extrictamente necesario para la solucion que me das??

Gracias de nuevo por la ayuda!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Anagrama java

Publicado por Renzo nevermindman@gmail.com (125 intervenciones) el 09/11/2011 20:06:14
para verificar que dos palabras son anagramas basta con ordenar sus letras de manera ascendente o descendente; si ambos arreglos ordenados son iguales entonces son anagramas.


Espero haberte ayudado

Te invito a visitar mi web: http://www.imagineanddo.com
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Anagrama java

Publicado por AndresZapata (3 intervenciones) el 10/11/2011 04:29:49
Hla renzo.

Haciendo las modificaciones que me dice, funciona a medias, cuando pongo dos palabras del mismo tamaño, pero completamente diferente en letras una de la otra, me marca TRUE como salida, solo me arroja un FALSE, cuando las palabras tiene tamaño diferente
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar