Java - Problemas iterador y iterable en matriz 2D

   
Vista:

Problemas iterador y iterable en matriz 2D

Publicado por Carlos (1 intervención) el 17/11/2015 21:57:05
Hola,

Quiero sumar dos matrices usando Iteradores para aprender a usarlos, pero me he encontrado con varios problemas.

He creado una clase que representa el funcionamiento básico de una matriz de enteros. La matriz podrá crearse indicando el número de las y de columnas o a partir de un array bidimensional que se le pase por parámetro.

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
import java.util.Iterator;
 
public class Matriz implements Iterable {
    public static int [][] matriz;
 
    public Matriz (int x, int y) {..}
    public Matriz (int [][] m) {..}
    public int getValor(int x, int y) {..}
    public void setValor(int x, int y, int d) {..}
    public int[][] getMatriz() {..}
    public int[] getColumna(int d) {..}
    public int[] getFila(int d) {..}
    public void verArray (int[] m) {..}
    public void verMatriz() {..}
 
    public Iterator iteradorFilasColumnas() {
        return new IteradorFilas();
    }
 
    public Iterator iteradorColumnasFilas() {
        return new IteradorColumnas();
    }
 
    @Override
    public Iterator iterator() {
        boolean bool = true;
        if (bool) return iteradorFilasColumnas();
        else return iteradorColumnasFilas();
    }
 
}

Para poder recorrer la matriz he implementado dos iteradores, el primero recorre la matriz por fiilas y luego por columnas y el segundo recorre por columnas y luego por filas. Estos iteradores se crean en clases aparte que implementan el interfaz Iterator.

Os pongo uno, ya que los dos son muy parecidos.

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
import java.util.Iterator;
 
public class IteradorFilas implements Iterator {
    public static int PosFila;
    public static int PosCol;
 
    public IteradorFilas() {
        PosCol = 0;
        PosFila = 0;
    }
 
    @Override
    public boolean hasNext() {
        return !((PosFila==Matriz.matriz[1].length) && (PosCol==Matriz.matriz.length));
    }
 
    @Override
    public Object next() {
        if (this.hasNext()) {
            if (PosFila!=Matriz.matriz.length) // Si no es final de línea.
                PosCol++;
            else PosFila++;
            return Matriz.matriz[PosFila][PosCol];
        }
        else return null;
    }
 
    @Override
    public void remove(){
        throw new UnsupportedOperationException("No soportado.");
    }
 
}


La matriz debe crear dos métodos para realizar la iteración (iteradorFilasColumnas e iteradorColumnasFilas) que devuelvan los iteradores que hemos creado para que sean accesibles a otras clases. La matriz debe implementar el interfaz Iterable y lo quiero configurar mediante un booleano que diga cual de los dos iteradores se devolvería al llamar al método iterator().

Hasta aquí creo que todo me va bien, el problema es cuando quiero sumar dos matrices, que no me deja hacer nada con los iteradores, ya que no me los reconoce como enteros, si no como Objects, y tampoco me deja castearlos.
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

Problemas iterador y iterable en matriz 2D

Publicado por Alex (1 intervención) el 19/11/2015 00:21:58
Podrias poner el codigo del iterador por columnas a ver si te puedo ayudar.
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