Foro de elhacker.net

Programación => Java => Mensaje iniciado por: mavicadi en 4 Mayo 2013, 01:37 am



Título: [Solucionado] Redefinir método iterator
Publicado por: mavicadi en 4 Mayo 2013, 01:37 am
Hola a todos, estoy haciendo una práctica de estructura de datos en Java y me he quedado atascado a la hora de redefinir el método iterator.

La práctica consiste en desarrollar una clase que descienda de AbstractCollection<Integer>. Esa clase tiene que recibir dos enteros, que indican un rango de números enteros(Los enteros que reciben serán el mínimo y el máximo del rango) y a partir de los enteros se debe recorrer la colección desde el mínimo al máximo usando el iterator.

Hay alguien que me pueda ayudar ?!!

PD: No pido una solución, lo necesito un camino al que seguir.

Un saludo.


Título: Re: [Ayuda] Redefinir método iterator
Publicado por: visualfree en 4 Mayo 2013, 03:37 am
Podrias comenzar mostrando tu avance estimado.

Saludos.


Título: Re: [Ayuda] Redefinir método iterator
Publicado por: mavicadi en 4 Mayo 2013, 19:28 pm
Ok. Os explico, la clase hereda de AbstractCollection<Integer> y tiene un constructor que recibe dos números enteros, esos números son el máximo y el mínimo.

Código:
public class ColeccionRangoEnteros extends AbstractCollection<Integer> {

public int entero1;
public int entero2;

/*
*  COnstructor que recibe dos enteros.
*/
public ColeccionRangoEnteros(int num1, int num2) {
this.entero1 = num1;
this.entero2 = num2;

}


En la práctica también hay que redefinir size y lo he hecho de la siguiente manera, y me ha funcionado :

Código:
	public int size() {
int tamano = 0;

if (this.entero1 < this.entero2) {
for (int i = this.entero1; i <= this.entero2; i++)
++tamano;
} else {
if (this.entero2 < this.entero1) {
for (int i = this.entero2; i <= this.entero1; i++)
++tamano;
}
}

return tamano;
}


Mi problema viene a continuación, cuando debo redefinir Iterator.

Código:
@Override
public Iterator<Integer> iterator() {

//TODO
return null;
}

Para realizar las comprobaciones el profesor nos deja una clase que se encarga de ello. Os pongo aquí una parte del código que hace las comprobaciones.

Código:
public static void compruebaColeccionRangoEnteros( int n ) {		
Collection<Integer> c1 = new ColeccionRangoEnteros(0, n);
assert !c1.contains(-1);
assert c1.contains(0);
assert c1.contains(n);
assert !c1.contains(n+1);
}

Bueno, siento si el mensaje ha sido largo y sería de gran ayuda si además encontráis algo que no está debidamente programado.

Un saludo.


Título: Re: [Ayuda] Redefinir método iterator
Publicado por: mavicadi en 6 Mayo 2013, 20:08 pm
Alguna idea ?


Título: Re: [Ayuda] Redefinir método iterator
Publicado por: nicolas_cof en 8 Mayo 2013, 05:12 am
Quizas te sirva...

Código
  1. package ar.com.nicolascof;
  2.  
  3. import java.util.AbstractCollection;
  4. import java.util.Collection;
  5. import java.util.Iterator;
  6.  
  7. public class Main {
  8. public static void main(String[] args) {
  9. check(5);
  10. }
  11.  
  12. private static void check(int n) {
  13. Collection<Integer> c1 = new ColeccionRangoEnteros(0, n);
  14. assert !c1.contains(-1);
  15. assert c1.contains(0);
  16. assert c1.contains(n);
  17. assert !c1.contains(n + 1);
  18. }
  19. }
  20.  
  21. class ColeccionRangoEnteros extends AbstractCollection<Integer> {
  22.  
  23. private Integer[] integers;
  24.  
  25. public ColeccionRangoEnteros(int min, int max) {
  26. if (min >= 0 && max >= 0 && min <= max) {
  27. this.integers = new Integer[max + 1];
  28. for (int i = 0; min <= max; ++i) {
  29. integers[i] = min++;
  30. }
  31. }
  32. }
  33.  
  34. @Override
  35. public Iterator<Integer> iterator() {
  36. return new Iterator<Integer>() {
  37. private int posicion = 0;
  38.  
  39. @Override
  40. public boolean hasNext() {
  41. return posicion < integers.length;
  42. }
  43.  
  44. @Override
  45. public Integer next() {
  46. return integers[posicion++];
  47. }
  48.  
  49. @Override
  50. public void remove() {
  51. }
  52.  
  53. };
  54. }
  55.  
  56. @Override
  57. public int size() {
  58. return integers.length;
  59. }
  60. }

Salu2


Título: Re: [Ayuda] Redefinir método iterator
Publicado por: mavicadi en 8 Mayo 2013, 15:34 pm
Muchísimas gracias nicolas_cof, ahora mismo me pondré con ello.

Solo para aclarar, que se me ha olvidado a la hora de poner el mensaje. En la práctica no es necesario guardar los valores intermedios de la colección (para eso usas el array integers verdad? ), simplemente te dan el máximo y el mínimo y la colección será todos los valores que estén en ese rango ( incluidos ellos ).

Muchas gracias otra vez por ayudar!!


Título: Re: [Solucionado] Redefinir método iterator
Publicado por: mavicadi en 12 Mayo 2013, 01:47 am
Edito el asunto para ponerlo como solucionado. Me ha funcionado bien.
Gracias!