Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    103

    [JAVA] matrici di oggetti

    vorrei creare una matrice di oggetti (quindi non di dati primitivi) ma non riesco a capire la sintassi.

    questa è la classe che rappresenta il mio oggetto: (vorrei definirla come classe interna della classe matrice, non so se è un errore o una complicazione...)

    private class Cella {//classe interna
    public Cella()
    {
    this.stato="libera";
    this.oggetto=null;
    }
    public void setOccupata(Oggetto ogg)
    {
    this.oggetto=ogg;
    this.stato="occupata";
    }
    public String getStato()
    { return stato; }

    public void setLibera()
    { this.stato="libera"; }

    public Oggetto getOccupante()
    { return this.oggetto; }

    private String stato;
    private Oggetto oggetto;
    }//fine classe interna

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    103

    continua...

    ora devo definire la classe Matrice, e avevo scritto:

    public class Matrice {

    public Matrice(int n, int m)
    {
    mat=new Cella[n][m];
    for(int i=1;i<n;i++)
    {
    for(int j=1;j<=m;j++)
    mat[i][j]=new Cella();
    }
    }

    public Cella[][] mat;
    ma c'è qlc che non quadra...potete aiutarmi a capire dove?

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    906
    ma c'è qlc che non quadra...potete aiutarmi a capire dove?
    E' un po' vaga come descrizione del problema.

    Dal codice che hai postato:
    1) Alla classe Matrice manca la parentesi finale.
    2) Manca la classe Oggetto.
    3) La classe Cella, se la vuoi fare interna, la devi mettere dentro Matrice (senza private se vuoi accedere ai metodi).
    4) Gli array in java partono da 0 e terminano a array.length-1
    codice:
    public class Matrice {
        
        public Matrice(int n, int m) {
            mat=new Cella[n][m];
            for(int i=0;i<n;i++) {
                for(int j=0;j<m;j++) {
                    mat[i][j]=new Cella();
                }
            }
        }
        
        public Cella[][] mat;
        
        class Cella {//classe interna
            public Cella() {
                this.stato="libera";
                this.oggetto=null;
            }
            public void setOccupata(Object ogg) {
                this.oggetto=ogg;
                this.stato="occupata";
            }
            public String getStato() {
                return stato; }
            
            public void setLibera() {
                this.stato="libera"; }
            
            public Object getOccupante() {
                return this.oggetto; }
            
            private String stato;
            private Object oggetto;
        }//fine classe interna
        
    }
    Se i problemi sono altri, spiega meglio nei post successivi...

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    103
    scusa ma hai messo insieme ciò che io avevo spezzato per porre l'attenzione sulla classe matrice, che è poi quella che non ho capito se ho scritto correttamente.
    Perciò visto che hai riscritto così come avevo già fatto Io, suppongo non ci sia nulla che non vada sintatticamente?

    Allora fammi capire una cosa, quando devo dichiarare una variabile istanza di tipo matrice (richiamata in un latra classe, la classe Oggetto per l'appunto) va bene:

    public Matrice[][] mat= new Matrice(righe, colonne);

    oppure basta:

    public Matrice mat= new Matrice(righe, colonne);

    infine quando devo passare come argomento un oggetto di tipo matrice va bene:
    //solo il costruttore della Classe
    public Oggetto(int x, String y, Matrice[][] mat)

    oppure

    public Oggetto(int x, String y, Matrice mat)

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    906
    scusa ma hai messo insieme ciò che io avevo spezzato per porre l'attenzione sulla classe matrice, che è poi quella che non ho capito se ho scritto correttamente.
    Perciò visto che hai riscritto così come avevo già fatto Io, suppongo non ci sia nulla che non vada sintatticamente?
    Era per quello che dicevo che la descrizione del problema era un po' vaga. Non capivo se il problema era che non ti compilava o se era un'altro.
    Sintatticamente va bene. Dal punto di vista progettuale sono scelte tue. Io di solito cerco di "nascondere" all'esterno le strutture dati interne delle classi(array, vettori, ecc) e fornisco metodi per inserire, togliere e leggere i valori. Pero' va bene anche come l'hai fatta tu.

    Allora fammi capire una cosa, quando devo dichiarare una variabile istanza di tipo matrice (richiamata in un'altra classe, la classe Oggetto per l'appunto) va bene:
    public Matrice[][] mat= new Matrice(righe, colonne);
    oppure basta:
    public Matrice mat= new Matrice(righe, colonne);
    La seconda.
    La prima non ha senso, perche' l'array e' interno all'oggetto matrice. In quel modo tenteresti di assegnare un oggetto di tipo Matrice ad un array bidimensionale di Matrici e ti darebbe errore.

    public Oggetto(int x, String y, Matrice[][] mat)
    oppure
    public Oggetto(int x, String y, Matrice mat)
    La seconda. Stesso motivo di sopra.

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    103
    Ok si ci ho provato e tutto funziona. Almeno sintatticamente è tutto corretto!!
    Peccato che il tutto deve funzionare all'interno di un programma con i Thread e questa è tutta un'altra storia....

    Grazie cmq della risposta, almeno ho acquisito una certezza in più.


  7. #7
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    103
    Premetto che alla fine ho fatto due classi distinte. Una che si chiama Cella e l'altra che si chiama Matrice e estende Cella. Non so se ho fatto bene...ma ora mi è venuto un altro dubbio.
    Siccome ho necessità di accedere ad una particolare cella della Matrice, come vi accedo:


    public Cella getCella(int x,int y)
    { return mat[x][y]; }

    oppure

    public Cella getCella(int x,int y)
    { return mat(x)(y); }

  8. #8
    La prima che hai detto. Non esiste in Java la notazione mat(x)(y)

    Al mio segnale... scatenate l'inferno!

  9. #9
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    103
    ok grazie. Chissà perchè allora mi da errore in questo punto del codice...
    deve essere un problema di semantica più che sintattico.

  10. #10
    che errore da?
    Al mio segnale... scatenate l'inferno!

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.