Banda Ancha EU

Comunidad de usuarios
de fibra, móvil y ADSL

Pedir tamaño de un array, rellenarlo con números y decir si cada elemento es número capicúa

BocaDePez
BocaDePez

A ver si alguien puede ayudarme ya que llevo poco tiempo programando(apenas un mes) y no veo forma de hacer este ejercicio. Sólo consigo que me diga si es capicúa o no lo es el último número del array pero no todos los elementos del array.

Lo que he hecho es lo siguiente:

public static void main(String[] args) {
    int i;
    String cifra = "";
    String cifraInv = "";
    String tamanyo = JOptionPane.showInputDialog("Dar tamaño al array "); //pido,por teclado,tamaño para el array
    int tamaño = Integer.parseInt(tamanyo);
    String Array[] = new String[tamaño]; //creo el array
    for (i = 0; i
        String numero = JOptionPane.showInputDialog("Dar un número ", tamaño); //recojo por teclado los elementos (números) para rellenar el array
        cifra = numero;
        Array[i] = cifra; //adjudico cada posición (i) del array a cada número que se me ha dado por teclado
        System.out.println(Array[i]); //visualizo los elementos del array
    }
    for (i = cifra.length() - 1; i >= 0; i--) {
        cifraInv = cifraInv + cifra.charAt(i); //utilizo la función charAt para invertir los elementos del array
    }
    if (cifraInv.equals(cifra)) { //utilizo un if para comprobar si cada elemento del array es igual que ese mismo elemento invertido
        JOptionPane.showMessageDialog(null, "es capicúa "); //si lo es, capicua
    } else {
        JOptionPane.showMessageDialog(null, "No es capicúa "); //si no lo es, no es capicua
    }
}
}

El problema es que sólo funciona para el último elemento del array pero no para todos los elementos del array de los que pasa impunemente.

Llevo desde la mañana probando diferentes formas pero no hay manera… a ver si alguien pudiese hacer alguna sugerencia.

BocaDePez
BocaDePez

Perdón, al comprobar el código veo que el recorrido del array no ha aparecido correctamente

aparece:

for(i=0;i

en realidad, lógicamente es:

for(i=0;i

bueno, pues lo dicho a ver si alguien puede echar alguna luz sobre el tema

sds

🗨️ 2
BocaDePez
BocaDePez

En fin no sé que pasa ha vuelto a aparecer de nuevo erroneamente

bueno, simplemente decir que hago un recorrido del array desde i=0 hasta toda la longitud del array y pongo un contador al final.

sds

🗨️ 1
fervigo

Sobre lo que desaparezca parte de lo que pusiste, cuando pongas el signo "<", entre eso y lo siguiente deja un espacio en blanco. Si no el foro lo interpretará como una etiqueta HTML.

Y usando el botoncito de "Código", si pones el código tabulado (con espacios en blanco), al publicar, se mantendrá. Si no, se pierde.

fervigo

Donde calculas cifraInv y compruebas si es igual a cifra, lo estás haciendo fuera de un bucle que recorra el array de elementos.

Y como cuando creaste dicho array, ibas metiendo en cifra el último elemento introducido, cifra se quedó con el último valor introducido y es ese el único que compruebas.

BocaDePez
BocaDePez

aparte de lo que te dice fervigo, deberías limpiar el código y no usar la ñ. pides varias veces el tamaño

cuando las cosas fallan y se esta empezando siempre es bueno usar valores fijos y predecibles en los bucles y trazar el programa viendo los valores de las variables en cada momento. de esta forma puedes ver si el programa ejecuta cada linea como tu pensabas y detectar los fallos.

al empezara programar la mejor estrategia es hacer algo muy pequeñito que sabes que funciona y luego ir añadiendo poco a poco viendo que responde a lo que pides en cada pasito

BocaDePez
BocaDePez

La comprobación de la inversión efectivamente la estás haciendo fuera del bucle.

Ya puestos, una posible mejora en tu programa es usar un único array. No es necesario hacer copias a cifraInv ;)

BocaDePez
BocaDePez

Muchísimas gracias a todos por las respuestas.

Esta tarde he visto las contestaciones y me he puesto a intentar resolver el problema...y salió.

Teníais razón con lo de bucle. Por lo tanto lo alargué. Pero me temo que soy un poco torpe y seguía sin salir. Lo que ocurría era que entraba en una especie de bucle infinito en el que el programa seguía pidiendo números "in eternum" sin respetar el tamaño del vector asignado.

Lo que se me ocurrió entonces fue meter la función para crear el inverso de números así como el if con las sentencias dentro de un método...y salió.

Bueno, aquí está(quité las "ñ" como me indicasteis):

public static void main(String[] args) {

// TODO code application logic here

int i;

String cifra="";

String cifraInv="";

String tamanyo=JOptionPane.showInputDialog("Dar tamaño al array ");

int tam=Integer.parseInt(tamanyo);

String Array[]=new String[tam];

System.out.println(Array.length);

for(i=0;i

String numero=JOptionPane.showInputDialog("Dar un número ",tam);

cifra=numero;

Array[i]=cifra;

System.out.println(Array[i]);

capicua(cifra);

}

}

public static void capicua(String cifra){

String cifraInv="";

for(int i=cifra.length()-1;i>=0;i--){

cifraInv=cifraInv+cifra.charAt(i);

}

if(cifraInv.equals(cifra)){

JOptionPane.showMessageDialog(null,"es capicúa ");

} else{

JOptionPane.showMessageDialog(null,"No es capicúa ");

}

}

}

Pues muchas gracias otra vez y je,je, tal vez vuelva a abusar de vuestra paciencia :) Un saludo y gracias.

🗨️ 1
fervigo

Lo del bucle infinito es seguramente porque con la extensión del primer bucle, pasaste a tener un bucle dentro de otro usando en ambos la misma variable para controlarlos, "i", en vez de distintas.

Al poner el bucle interno en otro método, aunque la variable se siga llamando igual, ya no es la misma, por eso te va.

De nada :)