Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2015
    Messaggi
    5

    Classe matrice, costruttore

    Dovrei implementare una classe per la rappresentazione di matrici che supporti la somma, ma ho alcune difficoltà, ho definito così la classe ,ponendo il costruttore

    public class Matrice{
    double [][]tab;


    public Matrice(int righe,int colonne){
    tab=new double [righe][colonne];
    }

    Ho creato poi due metodi, uno che assegna valori casuali alla matrice e uno che la stampa, il mio problema è nel metodo che definisce l'operazione, avevo pensato di scrivere una cosa del tipo :

    public Matrice somma (Matrice a,Matrice b){

    for (int i=0;i<tab.length;i++){
    for (int j=0;j<tab[0].length;j++){
    tab[i][j]=a [i][j]+ b[i][j];}}}


    ma chiaramente non me lo compila, mi da l'errore "The type of the expression must be an array type but it resolved to Matrice"
    dove a e b le ho create nel main come nuovi oggetti della classe Matrice.
    Come posso risolvere il problema mantenendo questa impostazione di risoluzione?

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da derj Visualizza il messaggio
    il mio problema è nel metodo che definisce l'operazione
    Prima del codice, il concetto: se la tua classe Matrice definisce, in generale, oggetti "mutabili", hai comunque almeno due possibilità: a) una certa operazione con 2 "operandi" modifica uno dei due operandi (tipicamente è il this, l'oggetto su cui è invocato il metodo!) oppure b) per una certa operazione viene creata e restituita una nuova Matrice con il risultato della operazione, senza toccare i due operandi Matrice. Potresti anche offrire entrambe le versioni.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2015
    Messaggi
    5
    Quello che intendi è che potrei sia creare una terza matrice a cui assegnare la somma delle altre due sia modificare soltanto una delle due sommandogli l'altra?
    Io in questo caso cercavo di crearne una terza,ma non riuscivo ad evitare quell'errore di compilazione

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da derj Visualizza il messaggio
    Quello che intendi è che potrei sia creare una terza matrice a cui assegnare la somma delle altre due sia modificare soltanto una delle due sommandogli l'altra?
    Tecnicamente i casi d'uso potrebbero essere:

    1) ma.operazione(mb);
    ma viene modificato dalla operazione, mb rimane intatto. Opzionalmente è possibile (spesso è utile nell'ottica del method-chaining o per assegnare/passare ad altro) fare in modo che il metodo restituisca il this, ovvero nell'esempio esattamente il riferimento ma.

    Opzionalmente:
    mc = ma.operazione(mb); // mc è il riferimento a ma!


    2) mc = ma.operazione(mb);

    mc è un nuovo oggetto, ma e mb restano intatti.


    Tecnicamente è anche possibile offrire un metodo statico es.:

    Matrice.operazione(ma, mb);

    ma è meno nell'ottica object-oriented e quindi generalmente meno preferibile.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2015
    Messaggi
    5
    Ok, ho provato in entrambi i modi , ma il problema principale sta proprio nella scrittura del codice del metodo somma. Continuo ad avere sempre lo stesso errore "the type of the expression must be an array type but it resolved to Matrice" e non capisco come evitarlo

  6. #6
    Tu sommi 2 oggetti Matrice ed il risultato lo metti in un double.
    per questo ti dice:
    "the type of the expression must be an array type but it resolved to Matrice"
    Il tipo di espressione deve essere un tipo ARRAY, ma viene risolto come Matrice(oggetto).

    codice:
    
    
    codice:
    public Matrice somma (Matrice a,Matrice b) {
       for (int i=0;i<tab.length;i++){
          for (int j=0;j<tab[0].length;j++){
             tab[i][j]=a[i][j]+ b[i][j];
          }
       }
    }



    Prova a fare un cast:
    codice:
    
    
    codice:
    tab[i][j]=(double) a[i][j]+ b[i][j];
    

    e vedi se ti funziona.

    Ciao.
    Ultima modifica di schumy2000; 23-01-2015 a 18:26
    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

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2015
    Messaggi
    5
    mi da lo stesso errore comunque

  8. #8
    Il problema come ha detto shumy è che tenti di sommare due oggetti Matrice, e ovviamente essi non possono essere ne sommatti ne castati a double, quello che devi fare ed accedere all'array di double dichiarati nel due classi (proprietà tab).
    Quindi quella istruzione diventerebbe :
    codice:
    tab[i][j]=a.tab[i][j]+ b.tab[i][j];
    


    Ps sarebbe meglio mettere un metodo get per accedere alla proprietà tab.

    Edit

    Mi sono accorto adesso anche di un'altro errore. Tu stai scorrendo la proprietà tab relativa al this e non a l'oggetto a

    codice:
    
    
    codice:
    publicMatrice somma (Matrice a,Matrice b){
    for(int i=0;i<a.tab.length;i++){
    for(int j=0;j<a.tab[0].length;j++){
             a.tab[i][j]=a.tab[i][j]+ b.tab[i][j];
          }
       }
    

    Questo ovviamente se vuoi che la somma sia salvata nell'oggetto a altimenti va bene la prima soluzione.
    Ultima modifica di francesco.muia; 23-01-2015 a 18:53

  9. #9
    Utente di HTML.it
    Registrato dal
    Jan 2015
    Messaggi
    5
    GRAZIE!! siete stati fondamentali, ecco il codice esatto: public Matrice somma(Matrice a, Matrice b){ Matrice c=new Matrice(a.mat.length,a.mat[0].length);
    for (int i=0;i<a.mat.length;i++){
    for (int j=0;j<a.mat[0].length;j++){

    c.mat[i][j]=a.mat [i][j]+ b.mat[i][j];
    }
    }
    return c;

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.