¿Porque no se almacenan correctamente las palabras en los arrays?

El objetivo de este programa es que dada una secuencia de caracteres introducida verificar si alguna palabra es un palindromo (palabra que es simétrica de derecha a izquierda: qwewq qweewq) una vez verificado que es un palindromo contar el numero de letras para ver si la palabra es par o impar. Si NumeroPalabrasPar < NumeroPalabrasImpar se imprimirán solo los palindromos impares y viceversa. En el caso de que haya el mismo numero de pares e impares se imprimirán todos los palindromos (esto esta aun por desarrollar, no hagáis mucho caso a la parte final del programa)

Mi problema es que solo me imprime la ultima palabra introducida, yo creo que el fallo esta en los arrays. No voy a colgar los métodos y clases que uso, ya que solo me interesa saber si hay un fallo a la hora de almacenar.

public class PalindromosParesImpares{

    static final int MAXIMO_PALABRAS = 500;
    static int contadorP = 0;
    static int contadorI = 0;
    static final int MAXIMO = 20 + 1;
    static Palabra[] palabraspar = new Palabra[MAXIMO_PALABRAS];
    static Palabra[] palabrasim = new Palabra[MAXIMO_PALABRAS];
    static char[] palabra = new char[MAXIMO];
    static int numCaracteres;

    public static void main(String[] args) throws Exception {
        System.out.print("Introduce la secuencia de palabras: ");
        Palabra pal=new Palabra();

        //HAY PALABRAS
        while (Palabra.hayPalabras()) {

            //LEER PALABRAS
            pal.lectura();

            //Es palindromo
            if (pal.esPalindromo()) {

                //Palabra PAR
                if (pal.palabraPar()) {
                    palabraspar[contadorP] = pal;
                    contadorP++;
                }

                //Palabra IMPAR
                if (!pal.palabraPar()) {
                    palabrasim[contadorI] = pal;
                    contadorI++;
                }

            }

        }

        //Si hay mas PARES que IMPARES se imprimiran las palabras pares
        if (contadorI < contadorP) {

            System.out.println("Las palabras palindromos pares son: ");
            for (int indice = 0; indice < contadorP; indice++) {
                System.out.println(palabraspar[indice]);
            }

        }

        //Si hay mas IMPARES que PARES se imprimiran las palabras impares
        if (contadorP < contadorI) {

            System.out.println("Las palabras palindromos impares son: ");
            for (int indice = 0; indice < contadorI; indice++) {
                System.out.println(palabrasim[indice]);
            }

        }
        //Aun por modificar
        if (contadorP == contadorI) {
            System.out.println("No hay palindromos");
        }

    }

}
2
задан 23.12.2016, 05:08
1 ответ

Он - классик...

Я предполагаю, что в Palabra ты читаешь слово и сохраняешь ее.

Но в array ты не сохраняешь String. Ты сохраняешь Palabra. И ТОЛЬКО ТЫ СОЗДАЕШЬ ИНСТАНЦИЮ СЛОВА.

Так что ты всегда сохраняешь тот же объект Palabra который, поскольку я вижу кода, только сохраняет последняя.

Так, во всех положениях array у тебя есть тот же объект, что дает тебе результат, который ты видишь.

Решение: создай (и используй) отличную инстанцию Palabra для каждого повторения.

1
ответ дан 24.11.2019, 11:54
  • 1
    Большое спасибо из-за respuesto, справедливого человека 2min перед твоим ответом я смог решить это. Также большое спасибо из-за aportació n. – Roggi 23.12.2016, 00:36

Теги

Похожие вопросы