Banda Ancha EU

Comunidad de usuarios
de fibra, móvil y ADSL

hosting en interdominios
4.290 lecturas y 8 respuestas
  • Boca de Pez Boca de Pez
    6

    Java-Pedir tamaño de un array, rellenarlo con numeros y decir si cada elemento es un numero capicua o no

    Hola a todos.

    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.

    Gracias y un saludo.

    Este tema lleva más de 6 meses inactivo. Es recomendable que abras un nuevo tema para retomar la conversación.
    • Boca de Pez Boca de Pez
      6

      Perdón, al comprobar el código veo que el recorrido del array…

      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

    • Donde calculas cifraInv y compruebas si es igual a cifra, lo…

      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.

      Si sabes que PP, PSOE y CiU nos destrozan la vida para lucrarse, ¿por qué les crees y das poder?
      QUITASELO VOTANDO a quien realmente nos defiende

      "Y sin embargo se mueve" (Galileo Galilei)

    • Boca de Pez Boca de Pez
      6

      aparte de lo que te dice fervigo, deberías limpiar el código…

      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

    • Boca de Pez Boca de Pez
      6

      La comprobación de la inversión efectivamente la estás…

      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 ;)

    • Boca de Pez Boca de Pez
      6

      Muchísimas gracias a todos por las respuestas. Esta tarde he…

      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.

      • Lo del bucle infinito es seguramente porque con la extensión…

        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 :)