TransWikia.com

Error de llenado array con Foreach Java

Stack Overflow en español Asked by user180162 on November 13, 2021

estoy intentando llenar un array con foreach pero sólo guarda el último caracter que ingreso y el resto del array se imprime como vacío, pueden ayudarme?

Técnicamente imprime un array así [b, , , ] siendo b el último caracter que ingresé.

package array;
import java.util.Arrays;
import java.util.Scanner;
import javax.swing.JOptionPane;

public class Array 
{
    
    public static void main(String[] args) {
        Scanner entrada = new Scanner(System.in);
        int nElementos;
        nElementos = Integer.parseInt(JOptionPane.showInputDialog("Número de elementos: "));
        char[]letras=new  char[nElementos];
        System.out.println("Digite los elementos");
        
        for(char i:letras)
        {
            System.out.println("Digite un caracter: ");
            letras[i] = entrada.next().charAt(0);
        }
        System.out.println("nLos caracteres del arreglo son");
        System.out.println(Arrays.toString(letras));
    
    }
    
    
}

2 Answers

Necesitas un contador para ir llenando el array, algo así:

     for(int i=0; i<letras.length; i++){
         System.out.println("Digite un caracter: ");
         letras[i] = entrada.next().charAt(0);
     }

Luego, para mostrar el array, no hace falta un bucle, porque precisamente Arrays.toString te muestra una cadena con los elementos de un array sin tener que recorrerlos uno por uno, basta con ponerlo simplemente así, sin bucle for:

System.out.println(Arrays.toString(letras));

Si el requerimiento es hacerlo conun for each tienes que implementar un índice que se vaya incrementando dentro del bucle, por ejemplo:

    /*
        Índice inicializado a 0
        que se irá incrementando dentro del bucle
    */
    int i = 0;
    /*
        OJO: he nombrado cada elemento ch
        por convención de nombre
        mientras que reservo i para el índice
    */
   
    for(char ch:letras)
    {
       
        System.out.println("Digite un caracter: ");
        /*
           Aquí se asigna el valor actual de i
           y se incrementa en 1 con ++ para la 
           próxima iteracción
        */
        letras[i++] = entrada.next().charAt(0);
    }

Answered by A. Cedano on November 13, 2021

El loop inicial realmente usa char i:letras asignando a i el valor de letras[0] (que tiene valor 0 incialmente) por lo que siempre inserta en la posicion 0. Debes usar un indice adicional ya que foreach no tiene info acerca de que posicion lleva en el loop:

public static void main(String[] args) {
    Scanner entrada = new Scanner(System.in);
    int nElementos;
    nElementos = 3;
    char[]letras=new  char[nElementos];
    System.out.println("Digite los elementos");
    int index=0;
    for (char i : letras) {
        System.out.println("Digite un caracter: ");
        letras[index] = entrada.next().charAt(0);
        index++;
    }
    System.out.println("nLos caracteres del arreglo son");
    System.out.println(Arrays.toString(letras));
    
    System.out.println("Longitud del array: "+letras.length);
}

Ademas para mostrarlo correctamente no es necesario hacer loop sobre Arrays.toString()

Answered by F.Igor on November 13, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP