Java - resultado incorrecto - Ejercicio sobre palindromos (adjunto codigo)

 
Vista:
sin imagen de perfil
Val: 25
Ha disminuido su posición en 7 puestos en Java (en relación al último mes)
Gráfica de Java

resultado incorrecto - Ejercicio sobre palindromos (adjunto codigo)

Publicado por azucarilla (9 intervenciones) el 09/11/2019 00:25:23
Hola buenas noches, soy estudiante de programacion tengo un ejercicio en el que tengo que sacar si una frase es palindroma o no, es decir que se lea del derecho o inverso del mismo modo. Tengo este codigo pero por algun motivo no me compara bien las palabras. Alguna idea ?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
import java.util.Scanner;
 
public class Act5 {
 
public static void main(String[] args) {
 
Scanner lector = new Scanner(System.in);
 
lector.useDelimiter("\n");
 
System.out.println("Escribe una frase");
 
String frase = lector.next();
 
palindromo(frase);
 
lector.close();
 
}
 
public static void palindromo(String frase) {
 
//eliminamos espacios y caracteres para juntar la palabra.
 
String nospace = frase.replace(" ","").replace("!", "").replace("?", "").replace("¿", "").replace("#", "").replace("*", "")
 
.replace(",", "").replace(".", "").replace(":", "").replace("\n", "");
 
System.out.println(nospace);
 
//medimos el largo de la palabra sin espacios ni caracteres
 
int num =nospace.length();
 
//calculamos la mitad de la palabra sin la letra central que es comun
 
int mitad = num /2-1;
 
//primera mitad de la palabra
 
String primeramitad = nospace.substring(0,mitad);
 
//segunda mitad de la palabra
 
String mitad2= nospace.substring(mitad+1,num);
 
//giro de la palabra del reves
 
byte [] byteArray = mitad2.getBytes();
 
 
 
        byte [] resultado =  new byte [byteArray.length];
 
 
 
        for (int i = 0; i<byteArray.length; i++) {
 
            resultado[i] =  byteArray[byteArray.length-i-1];
 
        }
 
        //conversion de byte a string
 
        String segundamitad = new String(resultado);
 
 
        //comparativa entre ambas palabras
 
        if (primeramitad.equals(segundamitad)) {
 
        System.out.println("Es palindromo");
 
        }
 
        else
 
        System.out.println("No es una palabra palindroma");
}
 
}
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
Imágen de perfil de Rodrigo
Val: 1.063
Plata
Ha aumentado 1 puesto en Java (en relación al último mes)
Gráfica de Java

resultado incorrecto - Ejercicio sobre palindromos (adjunto codigo)

Publicado por Rodrigo (258 intervenciones) el 09/11/2019 02:25:03
Imprime los strings antes de compararlos y verifica tu mismo que sub-strings estas generando para el caso de palindromes. Tengo la impresion que alguno de los 2 strings es mas largo que el otro.

Se ve que haces varias operaciones con indices y recorridos, transformaciones y comparaciones.
2 ideas:
- Por que no inviertes el string completo y comparas el original con el invertido completo, en vez de tratar de cortar el string en 2? Si el string es palindrome, entonces sera igual a su version invertida, sino, no.
- Por que no recorres el string sin hacer copia alguna desde los extremos, usando indices que se vayan acercando, hasta que se junten, y mientras no se junten comparar los caracteres a los que se apuntan. Si calzan hasta el final -> palindrome. Sino, no.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 25
Ha disminuido su posición en 7 puestos en Java (en relación al último mes)
Gráfica de Java

resultado incorrecto - Ejercicio sobre palindromos (adjunto codigo)

Publicado por azucarilla (9 intervenciones) el 09/11/2019 02:47:57
Hola !! primero que todo muchísimas gracias por tomarte un tiempo en revisar mi código. He verificado los strings y por algún motivo me imprime en la primera mitad un salto de linea creo que por el lector.useDelimiter("\n");, aunque no se como imprimir si no es así mi frase completa ya que solo me sacaría una palabra y no la frase. El fallo creo que es ese. si quisiera usar este codigo, como podría lograrlo sin usar el delimiter o como se cambiaria para que funcionase la frase entera?

Tienes razón debería haberla transformado en el sentido contrario y el resultado compararlo con la primera frase inicial, pero por algún motivo, como aún desconozco todas las posibilidades, tiendo a complicarme y a hacer operaciones de más buscando el resultado de algún modo.

supongo que para comparar la frase y hacerla del reves usaria un stringbuilder no ? he leido que la string en java no puede usar el reverse()

la segunda idea propuesta como se haria exactamente ? estoy empezando con el tema de los arrays y tampoco me aclaro mucho.
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
sin imagen de perfil
Val: 25
Ha disminuido su posición en 7 puestos en Java (en relación al último mes)
Gráfica de Java

resultado incorrecto - Ejercicio sobre palindromos (adjunto codigo)

Publicado por azucarilla (9 intervenciones) el 09/11/2019 03:26:14
Acabo de hacer este codigo, sigo teniendo el mismo problema que antes, ya que el useDelimiter me añade un salto de linea.
El use delimiter lo estoy usando para que me salga la frase entera, ya que no se hacerlo de otro modo en un string.
Hay otra manera de sacar la frase entera sin usar el usedelimiter y un solo string usando el scanner?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import java.util.Scanner;
 
public class Act5 {
 
	public static void main(String[] args) {
		Scanner lector = new Scanner(System.in);
		lector.useDelimiter("\n");
 
		System.out.println("Escribe una frase");
		String frase = lector.next();
 
 
		palindromo(frase);
 
		lector.close();
 
	}
 
	public static void palindromo(String frase) {
 
		String noSpace = frase.replace(" ", "").replace("!", "").replace("?", "").replace("¿", "").replace("#", "").replace("*", "")
				.replace(",", "").replace(".", "").replace(":", "").replace("\n", "");
 
		System.out.println(noSpace);
		StringBuffer sb = new StringBuffer(noSpace);
		sb = sb.reverse();
		if (noSpace.equalsIgnoreCase(sb.toString())) {
			  System.out.println(frase + " es palindromo");
		}
		else {
			  System.out.println(frase + " no es palindromo");
		}
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
Imágen de perfil de Rodrigo
Val: 1.063
Plata
Ha aumentado 1 puesto en Java (en relación al último mes)
Gráfica de Java

resultado incorrecto - Ejercicio sobre palindromos (adjunto codigo)

Publicado por Rodrigo (258 intervenciones) el 09/11/2019 04:11:16
La verdad es que no se, pero aqui dicen que no deberias usar setDelimiter(), nada, nunca, porque Scanner ya se deberia saltar los cambios de linea..

Tal vez alguien mas sabe, esto de los cambios de linea es una pregunta clasica de por aqui. Tal vez si buscas en el foro encuentres el truco.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 25
Ha disminuido su posición en 7 puestos en Java (en relación al último mes)
Gráfica de Java

resultado incorrecto - Ejercicio sobre palindromos (adjunto codigo)

Publicado por azucarilla (9 intervenciones) el 09/11/2019 15:48:18
Al final encontre la respuesta, era mas tonta de lo que pensaba, la diferencia estaba en la pregunta, al usar:
1
2
3
4
5
Scanner lector = new Scanner(System.in);
lector.useDelimiter("\n");
 
System.out.println("Escribe una frase");
String frase = lector.next();
lo que pasaba era que me sacaba la frase con el salto de linea al no haber salto de linea supongo yo que sacaba la frase entera. El fallo era usar next.
Podía haber hecho lo mismo usando nextLine
1
2
3
4
Scanner lector = new Scanner(System.in);
 
System.out.println("Escribe una frase");
String frase = lector.nextLine();
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
Imágen de perfil de Rodrigo
Val: 1.063
Plata
Ha aumentado 1 puesto en Java (en relación al último mes)
Gráfica de Java

resultado incorrecto - Ejercicio sobre palindromos (adjunto codigo)

Publicado por Rodrigo (258 intervenciones) el 09/11/2019 04:22:30
Tambien te sugiero que en vez que la funcion palindrome escriba si un string es palindome o no, que devuelva un booleano, true si es, false si no es.
Con esto es mas facil probar que tu codigo funciona.
Por ejemplo con una funcion como:

1
2
3
4
5
void probar(String posiblePalindrome, boolean resultadoEsperado) {
  if( palindrome(posiblePalindrome) != resultadoEsperado ) {
      System.out.println("Error: No es cierto que palindrome(" + posiblePalindrome +  ") == " + resultadoEsperado );
  }
}

y luego llamas desde el main

1
2
3
4
5
6
7
8
9
10
probar( "hola", false );
probar( "holaloh", true );
probar( "holaaloh", true );
probar( "holaloh x", false );
probar( "xholalohx", true );
// etc ..
probar("anilina", true );
probar("anita lava la tina", true );
probar("reconocer", true);
probar("dabale arroz a la zorra el abad", true );
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil
Val: 25
Ha disminuido su posición en 7 puestos en Java (en relación al último mes)
Gráfica de Java

resultado incorrecto - Ejercicio sobre palindromos (adjunto codigo)

Publicado por azucarilla (9 intervenciones) el 09/11/2019 15:53:35
Muchisimas gracias por toda tu ayuda! ya me funciona correctamente el ejercicio.
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
Imágen de perfil de Rodrigo
Val: 1.063
Plata
Ha aumentado 1 puesto en Java (en relación al último mes)
Gráfica de Java

resultado incorrecto - Ejercicio sobre palindromos (adjunto codigo)

Publicado por Rodrigo (258 intervenciones) el 09/11/2019 15:54:58
Para que sirva a otros, compartirias el resultado?
Usa el icono </> de arriba para encerrar el codigo y se vea mejor, si decides compartirlo.
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
sin imagen de perfil
Val: 25
Ha disminuido su posición en 7 puestos en Java (en relación al último mes)
Gráfica de Java

resultado incorrecto - Ejercicio sobre palindromos (adjunto codigo)

Publicado por azucarilla (9 intervenciones) el 09/11/2019 18:18:53
Por supuesto!! ayudar nunca sobra al final mi código ha sido el siguiente

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import java.util.Scanner;
 
public class Act5 {
 
	public static void main(String[] args) {
		Scanner lector = new Scanner(System.in);
 
		System.out.println("Escribe una frase");
		String frase = lector.nextLine();
 
		palindromo(frase);
 
		lector.close();
 
	}
 
	public static void palindromo(String frase) {
 
		String noSpace = frase.replace(" ", "").replace("!", "").replace("?", "").replace("¿", "").replace("#", "").replace("*", "")
				.replace(",", "").replace(".", "").replace(":", "");
 
		StringBuffer sb = new StringBuffer(noSpace);
		sb = sb.reverse();
		if (noSpace.equalsIgnoreCase(sb.toString())) {
			  System.out.println(frase + " -->Es palindromo");
 
		}
		else {
			  System.out.println(frase + " -->No es palindromo");
			}
	}
}
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