Visualizzazione dei risultati da 1 a 4 su 4

Discussione: Classe Matrice

  1. #1

    Classe Matrice

    Ciao a tutti!
    Sono assolutamente nuova nel campo della programmazione e ho iniziato da poco a programmare in java.
    Ho un problema che non riesco a risolvere riguardante lo svolgimento di un esercizio che mi chiede una classe per a rappresentazione del gioco del quindici.
    In pratica: lo zero nella matrice rappresenta la casella vuota. Ho scritto 4 metodi per spostare a casella vuota in basso a dx, sx. I metodi ritornano la matrice a cui i ho applicati con la mossa effettuata.
    Funziona tutto se applico i metodi una sola volta. Ma se dopo aver applicato uno di questi voglio applicarne un altro (ovvero fare una seconda mossa) sulla matrice restituita dal primo, nella matrice finale compare uno zero di troppo in una posizione che a me sembra del tutto casuale.

    Spero di essere stata abbastanza chiara. Posto il codice che ho scritto.

    codice:
    import java.util.ArrayList;
    
    public class Esercizio1Lezione7
    {
      public static void main(String[] argv)
      {
        Matrice m = new Matrice(4, 4);
        System.out.println(Matrice.Inserisci(m));
        System.out.println(m.SpostaGiu().SpostaDx());    // Problemi.
      }
    }
    
    
    class Matrice   
    { 
      int rig;
      int col;
      
      int[][] mat;
      int r_0;
      int c_0;
      
      public Matrice(int righe, int colonne)    
      { 
        mat = new int[righe][colonne];  
        rig = righe;
        col = colonne;
      }
       
      public static Matrice Inserisci(Matrice m)   
      {
        ArrayList<Integer> controllo = new ArrayList<Integer>();  
     
        for(int i=0; i<m.rig; i++)       
        { 
          for (int j=0; j<m.col; j++)  
          {
            m.mat[i][j]=DaiNumero(controllo, (m.rig*m.col));
          }
        }
        
        for(int i=0; i<m.mat.length; i++)       
        { 
          for (int j=0; j<m.mat[i].length; j++)  
          {
            if (m.mat[i][j] == 0)
            {
              m.r_0 = i;
              m.c_0= j;
            }
          }
        }
        return m;
      }   
      
      public static boolean TrovaNumeroArray(int n, ArrayList<Integer> array)  
      {
        for(int a=0; a<array.size(); a++)
        {
          if (array.get(a) == n)
          {
            return true;
          }
        }
        return false;
      }
      
      public static int DaiNumero(ArrayList<Integer> arrList, int estremoSup)   
      {
        int num = (int)(estremoSup*Math.random());
        
        if (TrovaNumeroArray(num, arrList) == false)
        {
          arrList.add(num);
          return num;
        }
        return DaiNumero(arrList, estremoSup);
      }
      
    
      public Matrice SpostaSu()
      {
        if (r_0!=0)
        {
          mat[r_0][c_0]=mat[r_0-1][c_0];
          mat[r_0-1][c_0]=0;
          r_0=r_0-1;
        }
        Matrice m_n=new Matrice(rig, col); 
        
        for(int i=0; i<mat.length; i++) 
        {
          for (int j=0; j<mat[0].length; j++) 
          {
            m_n.mat[i][j] = mat[i][j];
          }
        }
        return m_n;
      }
      
      public Matrice SpostaGiu()
      {
        if (r_0!=rig-1)
        {
          mat[r_0][c_0]=mat[r_0+1][c_0];
          mat[r_0+1][c_0]=0;
          r_0=r_0+1;
        }
        Matrice m_n=new Matrice(rig, col);  
         
        
        for(int i=0; i<mat.length; i++) 
        {
          for (int j=0; j<mat[i].length; j++) 
          {
            m_n.mat[i][j] = mat[i][j];
          }
        }
        return m_n;
      }
      
      public Matrice SpostaDx()
      {
        if (c_0!=col-1)
        {
          mat[r_0][c_0]=mat[r_0][c_0+1];
          mat[r_0][c_0+1]=0;
          c_0=c_0+1;
        }
        Matrice m_n=new Matrice(rig, col);  
                         
        for(int i=0; i<mat.length; i++) 
        {
          for (int j=0; j<mat[i].length; j++) 
          {
            m_n.mat[i][j] = mat[i][j];
          }
        }
        return m_n;
      }
      
      public Matrice SpostaSx()
      {
        if (c_0!=0)
        {
          mat[r_0][c_0]=mat[r_0][c_0-1];
          mat[r_0][c_0-1]=0;
          c_0=c_0-1;
        }
        Matrice m_n=new Matrice(rig, col);  
        
        for(int i=0; i<mat.length; i++) 
        {
          for (int j=0; j<mat[i].length; j++) 
          {
            m_n.mat[i][j] = mat[i][j];
          }
        }
        return m_n;
      }
        
      public String FormattazioneStampaMatrice(int r, int c)   
      { 
        for(int i=0; i<r; i++)   
        { 
          for (int j=0; j<c; j++)  
          {
            String perStampa = mat[i][j]+"  ";   
            System.out.print(perStampa.substring(0,2)+"   ");  
          } 
          System.out.println();   
        }
        return " ";                  
      }
      
      public String toString()      
      {
        return FormattazioneStampaMatrice(rig, col)+" ";
      }
    }

  2. #2
    ho fatto un piccolo Debug ed ho visto che
    codice:
    mat[r_0][c_0]=mat[r_0][c_0+1];
    r_0 e c_0 sono pari a zero.


    quindi la prossima istruzione
    codice:
      mat[r_0][c_0+1]=0;
    ti andrà a mettere lo zero sempre nella posizione 0,1



    Ti basta mettere
    codice:
    class Matrice   
    { 
      int rig;
      int col;
      
      int[][] mat;
      static int r_0;
      static int c_0;

    Ciao d
    I computer sono incredibilmente veloci, accurati e stupidi.
    Gli uomini sono incredibilmente lenti, inaccurati e intelligenti.
    Insieme sono una potenza che supera l'immaginazione.

    A.Einstein

  3. #3
    Orca è vero! Nonostante ho controllato più volte mi era proprio fuggito!

    Grazie mille veramente!!!! Ciao

  4. #4
    Con lo static risolvi, come ho scritto prima

    Ciao
    I computer sono incredibilmente veloci, accurati e stupidi.
    Gli uomini sono incredibilmente lenti, inaccurati e intelligenti.
    Insieme sono una potenza che supera l'immaginazione.

    A.Einstein

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.