Advertisement
Guest User

Untitled

a guest
Jan 24th, 2017
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.13 KB | None | 0 0
  1. package matrice;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.Iterator;
  5.  
  6. public class MatriceSparsa<T> implements Iterable<T> {
  7.  
  8.     protected ArrayList<Record<T>>[] valori;
  9.     private int numRighe;
  10.     private int numColonne;
  11.     private T defaultValue;
  12.     @Override
  13.     public Iterator<T> iterator() {
  14.         return new IteratoreMatriceSparsa<>(valori);
  15.     }
  16.  
  17.  
  18.     /**
  19.      * Crea una nuova matrice di dimensione righe x colonne fissando il valore di default.
  20.      * @param righe il numero di righe della matrice
  21.      * @param colonne il numero di colonne della matrice
  22.      * @param valore il valore di default.
  23.      */
  24.     public void creaMatrice(int righe, int colonne, T valore){
  25.         this.numColonne = colonne;
  26.         this.numRighe = righe;
  27.         this.defaultValue = valore;
  28.  
  29.         valori =  new ArrayList[righe];
  30.  
  31.         for(int i = 0; i < valori.length; i++){
  32.             valori[i] = new ArrayList<Record<T>>();
  33.             for(int j = 0; j < colonne; j++){
  34.                 Record<T> defaultValue = new Record<T>(valore, j);
  35.                 valori[i].add(defaultValue);
  36.             }
  37.         }
  38.     }
  39.  
  40.     public void cambiaValore(int riga, int colonna, T valore){
  41.  
  42.         if(riga > numRighe || colonna > numColonne) throw new EccezionePosInesistente("La posione non esiste.");
  43.         ArrayList<Record<T>> rigaDesiderata = valori[riga];
  44.         Record<T> recordDesiderato = rigaDesiderata.get(colonna);
  45.         recordDesiderato.valore = valore;
  46.     }
  47.  
  48.     public T valore(int riga, int colonna){
  49.         if(riga > numRighe || colonna > numColonne) throw new EccezionePosInesistente("La posione non esiste.");
  50.         ArrayList<Record<T>> rigaDesiderata = valori[riga];
  51.         Record<T> recordDesiderato = rigaDesiderata.get(colonna);
  52.         return recordDesiderato.valore;
  53.     }
  54.  
  55.     public int numRighe(){
  56.         return numRighe;
  57.     }
  58.  
  59.     public int numColonne(){
  60.         return numColonne;
  61.     }
  62.  
  63.     public int numValoriSignificativi(){
  64.         int counter = 0;
  65.  
  66.         for(int i = 0; i < numRighe; i++){
  67.             for(int j = 0; j < numColonne; j++){
  68.                 Record tmp = valori[i].get(j);
  69.                 T valoreTmp = (T) tmp.valore;
  70.                 if(valoreTmp != defaultValue)
  71.                     counter++;
  72.             }
  73.         }
  74.         return counter;
  75.     }
  76.  
  77.    
  78.     private class Record<E>{
  79.         E valore;
  80.         int colonna;
  81.  
  82.         public Record(E valore, int colonna){
  83.             this.valore = valore;
  84.             this.colonna = colonna;
  85.         }
  86.     }
  87.    
  88.     private class IteratoreMatriceSparsa<T> implements Iterator<T> {
  89.  
  90.         ArrayList<Record<T>>[] matrice;
  91.         private int numRighe = matrice.length;
  92.         private int colonna = 0;
  93.         private int riga = 0;
  94.  
  95.         public IteratoreMatriceSparsa(ArrayList<Record<T>>[] matrice) {
  96.             this.matrice = matrice;
  97.         }
  98.        
  99.         @Override
  100.         public boolean hasNext() {
  101.             return riga < numRighe;
  102.         }
  103.  
  104.         @Override
  105.         public T next() {
  106.            
  107.             T elem = (T) matrice[riga].get(colonna).valore;        
  108.             colonna++;
  109.            
  110.             if(colonna == matrice[riga].size()){
  111.                 colonna = 0;
  112.                 riga++;
  113.             }
  114.             return elem;
  115.         }
  116.     }
  117.    
  118.     public static void main(String[] args) {
  119.  
  120.         MatriceSparsa<String> matrice = new MatriceSparsa<String>();
  121.         matrice.creaMatrice(2, 2, "0");
  122. //      matrice.cambiaValore(1, 1, "cazzo!");
  123.  
  124.         System.out.println(matrice.numValoriSignificativi());
  125.        
  126.         Iterator iter = matrice.iterator();
  127.         while(iter.hasNext()){
  128.             System.out.println(iter.next());
  129.         }
  130.     }
  131.    
  132. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement