Java - Error Java

 
Vista:
Imágen de perfil de Lucas
Val: 57
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Error Java

Publicado por Lucas (13 intervenciones) el 05/06/2020 20:50:51
Buenas tardes, he creado una interfaz gráfica en Java y a la hora de listar un txt tengo el siguiente mensaje de error en la linea 31.:
"Can only iterate over an array or an instance of java.lang.Iterable"

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
public class botonVerEstudiantesActionListener implements ActionListener {
 
	private ArrayList<Estudiante> listEstudiantes = new ArrayList<Estudiante>();
	BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
 
	private Ventana ventana;
 
	public botonVerEstudiantesActionListener(Ventana ventana) {
		this.ventana = ventana;
	}
 
	@Override
	public void actionPerformed(ActionEvent e) {
		String listEstudiantes = ventana.leerDatosDeEntrada();
		if (listEstudiantes != null && !listEstudiantes.isEmpty()) {
			JOptionPane.showMessageDialog(ventana, "No hay datos de entrada en la caja de texto", "Información",
					JOptionPane.INFORMATION_MESSAGE);
		} else {
 
			String[] cabeceras = new String[]{"ID", "NOMBRE", "APELLIDOS", "EMAIL", "SEXO",
					"EST-CIVIL", "FECHA-NAC", "EDAD", "CUMPLE", "FECHA-CREACION"};
			ventana.escribirDatosDeSalida(String.format(":: Mostrando todos los estudiantes ..."));
			DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); // Establecemos el formato de la fecha y hora
			SimpleDateFormat sdfNac = new SimpleDateFormat("yyyy/MM/dd");
			Calendar cal = Calendar.getInstance();
			ventana.escribirDatosDeSalida(String.format(":: Instante actual: " + dateFormat.format(cal.getTime())));
			//System.out.println("Numero total de estudiantes (" + listEstudiantes.size() + ")\n");
 
			//Este metodo nos mostrará el contenido del txt en formato tabular
			Ventana.escribirDatosDeSalida(String.format("%5s %-10s %-10s %-22s %-10s %-12s %-10s %10s %8s %-10s \n", cabeceras[0], cabeceras[1], cabeceras[2], cabeceras[3], cabeceras[4], cabeceras[5], cabeceras[6], cabeceras[7], cabeceras[8], cabeceras[9]));
			for (Estudiante es : listEstudiantes) {
				LocalDate fechaNacimiento;
				LocalDate currentDate;
				Ventana.escribirDatosDeSalida(String.format("%5s %-10s %-10s %-22s %-10s %-12s %-10s %10s %8s %-10s \n",
						es.getIdentificadorFormateado(),
						es.getNombre(),
						es.getApellidos(),
						es.getEmail(),
						es.getSexo(),
						es.getEstadoCivil(),
						sdfNac.format(es.getFechaNacimiento().getTime()),
						es.getEdad(),
						es.getDiasCumpleanos(),
						dateFormat.format(es.getFechaCreacion().getTime())
				));
			}
			System.out.println("\n\n");
		}
 
 
	ventana.escribirDatosDeSalida(String.format(listEstudiantes));
}
}

Alguien puede ayudarme a solucionar este problema?
Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Error Java

Publicado por Tom (1632 intervenciones) el 05/06/2020 21:43:57
¿ La clase String implementa java.lang.Iterable ?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Kabuto
Val: 2.767
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Error Java

Publicado por Kabuto (723 intervenciones) el 06/06/2020 21:26:58
Como dice Tom, estas intentando iterar un String.
Y esto te ocurre porque has usado el mismo nombre para el ArrayList:
1
private ArrayList<Estudiante> listEstudiantes = new ArrayList<Estudiante>();

Y para este String:
1
String listEstudiantes = ventana.leerDatosDeEntrada();


Como están en "ámbitos" (scope) distintos, el compilador no se queja de que compartan nombre. Pero claro, a la hora de referirte a ellos dentro de ese método, va a tener preferencia el String y no el ArrayList.
Aquí haces referencia al String, el cuál no es Iterable, y de hecho no es lo que quieres iterar:
1
for (Estudiante es : listEstudiantes) {

Si quieres referirte al ArrayList, probablemente lo soluciones usando la palabra reservada this. Aunque yo recomendaría elegir nombres distintos:
1
for (Estudiante es : this.listEstudiantes) {
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Lucas
Val: 57
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Error Java

Publicado por Lucas (13 intervenciones) el 09/06/2020 14:25:26
Gracias por toda la información, es de gran ayuda!
Al final lo solucione de la siguiente manera, cambiando a public e importando import java.util.ArrayList;

1
public ArrayList<Estudiante> listEstudiantes = new ArrayList<Estudiante>();


Saludos!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar