PDA

Visualizza la versione completa : [Java] design pattern - iterator


Gumble
17-05-2005, 07:32
ciao, ho una matrice bidimensionale e questo il file di esempio:


import matrix.Matrix;

public class MatrixTest {

public static void main(String[] args) {
int rows = 2;
int columns = 3;
Matrix matrix = new Matrix(rows, columns);
for (int i=0; i<rows;i++) {
for (int j=0; j<columns; j++) {
matrix.putItem(i, j , (String.valueOf(i)) + "-" + (String.valueOf(j)));
}
}

//TODO: Add your code here
//qui aggiungo il richiamo all'iterator


}

}

qui devo aggiungere il codice necessario per creare l'iterator in modo da ottenere il seguente risultato quando eseguo il file MatrixTest.java ->

0-0 0-1 0-2 1-0 1-1 1-2 (praticamente devo percorre l'array col sistema "Row-Column).

codice di Matrix.java:



package matrix;
import iterator.Iterable;
import iterator.Iterator;

public class Matrix implements Iterable {

private int rows, columns;
private Object mat[][];

public Matrix(int rows, int columns) {
this.rows = rows;
this.columns = columns;

mat = new Object[rows][columns];
}

public int getRows() {
return rows;
}

public int getColumns() {
return columns;
}


public Object getItem(int r, int c) {
return mat[r][c];
}

public void putItem(int r, int c, Object o) {
mat[r][c] = o;
}

public Iterator createIterator() {
TODO: add you code here
return null;
}

}


ma non ho capito come fare... help???

dekdek
17-05-2005, 09:22
Simpatico esercizio.
Io l'ho fatto cosi':



import matrix.Matrix;

public class MatrixTest {

public static void main(String[] args) {
int rows = 2;
int columns = 3;
Matrix matrix = new Matrix(rows, columns);
for (int i=0; i<rows;i++) {
for (int j=0; j<columns; j++) {
matrix.putItem(i, j , (String.valueOf(i)) + "-" + (String.valueOf(j)));
}
}

// Questo lo puoi fare solo in JDK 1.5 - Con 1.4 innesta i for come sopra
for (Object o : matrix) {
System.out.println(o);
}

//TODO: Add your code here
//qui aggiungo il richiamo all'iterator


}

}





package matrix;
import java.util.Iterator;
import java.util.NoSuchElementException;

public class Matrix implements Iterable {

private int rows, columns;
private Object mat[][];

public Matrix(int rows, int columns) {
this.rows = rows;
this.columns = columns;

mat = new Object[rows][columns];
}

public int getRows() {
return rows;
}

public int getColumns() {
return columns;
}


public Object getItem(int r, int c) {
return mat[r][c];
}

public void putItem(int r, int c, Object o) {
mat[r][c] = o;
}

// public Iterator createIterator() {
// }

public Iterator<Object> iterator() {
return new MatrixIterator();
}

public class MatrixIterator implements Iterator<Object> {

int a;
int b;

public MatrixIterator() {
a = 0;
b = -1;
}

public void remove() {
// Non ha senso rimuovere un elemento da una matrice!
throw new UnsupportedOperationException("Tried to remove an element from a matrix!");
}

public Object next() {
if (!hasNext())
throw new NoSuchElementException();
b++;
// b%=mat[a].length;
if (b==mat[a].length) {
b=0;
a++;
}
return mat[a][b];
}

public boolean hasNext() {
return ((a<mat.length-1)||(b<mat[a].length-1));
}

}

}

alka
17-05-2005, 09:50
Il linguaggio va sempre specificato anche nel titolo della discussione.

Ciao! :ciauz:

Gumble
17-05-2005, 09:56
grazie mille per l'aiuto... :D :D





scusa mod... la prox almeno lo so! :)

Loading