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));
}
}
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
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP