Java - Ayuda ejercicio JAVA - Iteradores y Colecciones

 
Vista:
sin imagen de perfil

Ayuda ejercicio JAVA - Iteradores y Colecciones

Publicado por Jorge (3 intervenciones) el 25/02/2022 19:23:34
Buenas tardes,

Tengo un ejercicio en Java que no consigo ver cómo resolverlo. En el ejercicio nos piden resolverlo empleando únicamente las clases iteradoras.

Me piden crear una clase llamada IteracionColecciones, esta clase tendrá dos métodos estáticos denominados:
- frecuencia: public static <E> int frecuencia(Collection<E> c, Object o)
- maximo: public static <E> E maximo(Collection<E> c)

El primer método devuelve la frecuencia (número de apariciones) de un objeto en una colección. Las comparaciones entre elementos deben realizarse con el método equals siempre que sea posible.

La resolución a este método ha sido la siguiente:

public static <E> int frecuencia(Collection<E> c, Object o) {

Iterator<?> it = c.iterator();
int contador = 0;
Object elemento = null;

while(it.hasNext()) {
elemento = it.next();

//No es posible realizar la comparación cuando se trata de un null
if(elemento != null) {
if(elemento.equals(o)) {
contador++;
}
}
}

return contador;
}

El segundo método calcula el máximo, suponiendo que los objetos a recorrer y comparar implementan la interfaz Comparable.

En este caso no consigo ver como realizar la comparación para obtener el máximo, ya que la colección puede ser de diferentes tipos y por tanto entiendo que debería resolverlo de manera genérica.

De momento lo que tengo hecho es esto:

public static <E> E maximo(Collection<E> c) {

Iterator<?> it = c.iterator();
Object actual = null;
E max = null;

Object lista = c.toArray();

while(it.hasNext()) {
actual = it.next();

}

return max;

}

Agradezco cualquier ayuda para poder avanzar...

Adjunto capturas de la clase a construir y de la clase test que verificaría el funcionamiento.

Clase
Test
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

Ayuda ejercicio JAVA - Iteradores y Colecciones

Publicado por Tom (1831 intervenciones) el 26/02/2022 09:08:27
No deberías suponer que la colección contiene objetos Comparable sino que deberías epecificarlo.
En todo caso:

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
public class Generic {
	/* Good */
	public static <E extends Comparable> E maximo(Collection<E> c) {
		E maxval = null;
		Iterator<E> it = c.iterator();
		while(it.hasNext()) {
			E v = it.next();
			if(maxval == null || maxval.compareTo(v) > 0) {
				maxval = v;
			}
		}
		return maxval;
	}
	/* BAD */
	public static <E> E maximo_bad(Collection<E> c) {
		E maxval = null;
		Iterator<E> it = c.iterator();
		while(it.hasNext()) {
			E v = it.next();
			if(maxval == null || ((Comparable)maxval).compareTo(v) > 0) {
				maxval = v;
			}
		}
		return maxval;
	}
}
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
sin imagen de perfil

Ayuda ejercicio JAVA - Iteradores y Colecciones

Publicado por Jorge (3 intervenciones) el 27/02/2022 01:37:02
Gracias por la respuesta.

Después de probar la solución, en la condición if(maxval == null || maxval.compareTo(v) > 0) entra la primera vez porque el valor maxval es nulo y se le asigna el valor correspondiente, al pasar al siguiente valor del iterador el método compareTo siempre devuelve -1 por lo que no se obtiene el máximo.
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
sin imagen de perfil

Ayuda ejercicio JAVA - Iteradores y Colecciones

Publicado por Jorge (3 intervenciones) el 27/02/2022 02:44:57
Ya lo he solucionado al cambiar el signo en la comparación a menor.

Gracias!!
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