Autor Tema: Código de JAVA Extraer vocales de un arreglo cómo mejorar planteamiento  (Leído 4692 veces)

juan0754

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 6
    • Ver Perfil
Hola amigos ... necesito ayuda con un problema. Me pidieron extraer vocales de un arreglo de String para posteriormente, poner cada vocal en un arreglo de char. Logre extraer las vocales del arreglo de String. Pero por alguna extraña razon no puedo meter las vocales a un arreglo de char. Intente de varias maneras pero por alguna extraña razón que desconozco no logro mostrar por pantalla el arreglo de char. :(

Código: [Seleccionar]
public class Prueba {

public static void main(String[] args) {

String[] aux=new String[1];
aux[0]="cdodi";
char ux=' ';
char[] res=new char[2];
int cont=0;
for(int i=0;i<aux.length;i++){
if(aux[0].charAt(i)=='a'||aux[0].charAt(i)=='e'||aux[0].charAt(i)=='i'||aux[0].charAt(i)=='o'||aux[0].charAt(i)=='u'){
ux=aux[0].charAt(i);
System.out.println(ux);
res[cont]=ux;

cont+=1;
}
}
for(int i=0;i<res.length;i++){
System.out.println(res[i]);
}

}

}
« Última modificación: 13 de Julio 2018, 19:57 por Alex Rodríguez »

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 989
    • Ver Perfil
Re:Ayuda en mi código de JAVA (Extraer vocales de un arreglo)
« Respuesta #1 en: 03 de Julio 2018, 20:53 »
Hola.

El problema se debe a un pequeño fallo. Muy pequeño, pero suficiente para que el programa no funcione correctamente.

El problema está en el primer bucle for, te lo marco en rojo:
Citar
for(int i=0;i<aux.length;i++){
         if(aux[0].charAt(i)=='a'||aux[0].charAt(i)=='e'||aux[0].charAt(i)=='i'||aux[0].charAt(i)=='o'||aux[0].charAt(i)=='u'){
            ux=aux[0].charAt(i);
            System.out.println(ux);
            res[cont]=ux;
            
            cont+=1;
         }
      }

Ahí le estás diciendo el bucle que aumente el contador según la longitud de aux.
Pero claro, aux es un array con un solo elemento, un String. Así que ese bucle solo se repite una vez.
Porque aux.length = 1

Para que funcione, tienes que decirle al bucle que aumente el contador según la longitud del String que hay dentro de aux.
Es decir, según lo que mida aux[0].

Si cambias este pequeño detalle, ya si funcionará. Te lo señalo en verde como ha de quedar.

Citar
for(int i=0;i<aux[0].length();i++){
         if(aux[0].charAt(i)=='a'||aux[0].charAt(i)=='e'||aux[0].charAt(i)=='i'||aux[0].charAt(i)=='o'||aux[0].charAt(i)=='u'){
            ux=aux[0].charAt(i);
            System.out.println(ux);
            res[cont]=ux;
            
            cont+=1;
         }
      }

Con esto ya funciona.

Por otro lado, no es una solución muy elegante para un ejercicio.
Esta bien como prueba inicial, pero hay cosas que se deben mejorar.
Por ejemplo, el arreglo de char lo declaras con una longitud de [2] porque tú ya sabes que solo hay dos vocales.

Habría que pensar una forma de solucionarlo sin saber de antemano cuantas vocales vamos a encontrar.

Además este código está pensado para un arreglo con un solo y único String. También sería interesante hacerlo de manera que sirva para arreglos de cualquier tamaño, ya tenga solo 1 elemento, 5, 25,  o los que sean...
NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".