WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Problem mit Cell Array in Klasse

 

poloh85
Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 22.06.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.06.2011, 12:53     Titel: Problem mit Cell Array in Klasse
  Antworten mit Zitat      
Hallo!

Ich versuche seit einigen Tagen ein Problem mit Cell Arrays zu lösen. Ich benutze das Cell Array um Matrizen verschiedener Größe abzuspeichern. Im Konstruktor kann ich dem Array Werte zuweisen. Ändere ich diese Werte jedoch in einer Funktion sind die Änderungen nur solange aktiv, solange die Funktion abgearbeitet wird. Ist die Funktion fertig übernimmt das Array aber die ursprünglichen Werte wieder. Ich habe hier mal einen Beispielcode geschrieben, der nur dieses Problem darstellen soll.

Code:

classdef cellTest
 
  properties
    cellArray
    p
  end  
 
  methods
   
    function obj = cellTest(p)
      obj.p = p;
      for i = 1 : obj.p
        n = rand();
        m = rand();
        n = floor(n * 10);
        m = ceil(m * 10);
        obj.cellArray{i} = rand(n,m);
      end
    end
 
    function changeCellArray(obj)
      for i = 1 : obj.p
        for j = 1 : size(obj.cellArray{i},1)
          for k = 1 : size(obj.cellArray{i},2)
            obj.cellArray{i}(j,k) = 1;
          end
        end
      end
    end
   
  end
end
 


Der Code zum Aufrufen:
Code:

test = cellTest(5)
test.changeCellArray()
 


Wenn man beim Debuggen nun in der Funktion changeCellArray() einen Breakpoint am Ende der i Schleife setzt, kann man das "Phänomen" beobachten.

Ich weis jetzt nicht, ob es an einer falschen Zuweisung liegt, also vielleicht ein falsches Objekt der Klasse referenziert wird (was ich eigentlich ausschließe) oder das man eine Zuweisung für ein Cell Array Element einfach anders ausführen muss? Vielleicht gibt es auch ein anderes Konstrukt als das Cell Array um die gewünschte Funktionalität zu erreichen?

Für Hilfe wäre ich sehr dankbar!

Gruß PoloH85
Private Nachricht senden Benutzer-Profile anzeigen


Marco H.
Forum-Guru

Forum-Guru


Beiträge: 404
Anmeldedatum: 12.11.10
Wohnort: Dortmund
Version: 2010a/2012b
     Beitrag Verfasst am: 22.06.2011, 14:49     Titel:
  Antworten mit Zitat      
Hey,
mir fallen nun spontan 2 Lösungen ein.
1. du benutzt ein Handleobjekt und kein Valueobjekt
Code:

classdef cellTest < handle
 

2. wenn du jedoch mit Valueobjekten arbeiten möchtest, dann brauchst du noch eine set Methode für dein CellArray Property
Code:

classdef cellTest
 
  properties
    cellArray
    p
  end  
 
  methods
   
    function obj = cellTest(p)
      obj.p = p;
      for i = 1 : obj.p
        n = rand();
        m = rand();
        n = floor(n * 10);
        m = ceil(m * 10);
        obj.cellArray{i} = rand(n,m);
      end
    end
 
    function changeCellArray(obj)
      for i = 1 : obj.p
        for j = 1 : size(obj.cellArray{i},1)
          for k = 1 : size(obj.cellArray{i},2)
            cellArray2{i}(j,k) = 1;
          end
        end
      end
      obj.cellArray=cellArray2;
    end
   
    function obj = set.cellArray(obj,carray)
        obj.cellArray = carray;
    end
  end
end
 


Ich hoffe das bringt dich weiter...

MfG Marco
Private Nachricht senden Benutzer-Profile anzeigen
 
poloh85
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 22.06.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.06.2011, 10:39     Titel:
  Antworten mit Zitat      
Super! Danke!

Ich werd es mit der Vererbung der handle Klasse benutzen. Da spar ich mir dann die set Funktionen (habe noch einige andere Properties).
Hab mir das jetzt in der Hilfe mal durchgelesen. Bei mir wurde also, da ich ein Value Objekt benutzt habe, beim Funktionsaufruf immer nur eine Kopie meines Objektes verwendet, das nach beenden der Funktion wieder im Nirvana verschwunden ist. Habe ich das so richtig verstanden?
Rein interessehalber, warum gibt es überhaupt zwei Typen von Objekten? Im Grunde will ich doch immer, dass sich die Properties des Objektes mit dem ich arbeite verändern. Sonst bringt meines Erachtens nach die OOP nichts.
Oder gibt es da bestimmte fälle in denen das so von Vorteil ist?

Gruß
Private Nachricht senden Benutzer-Profile anzeigen
 
Marco H.
Forum-Guru

Forum-Guru


Beiträge: 404
Anmeldedatum: 12.11.10
Wohnort: Dortmund
Version: 2010a/2012b
     Beitrag Verfasst am: 23.06.2011, 19:09     Titel:
  Antworten mit Zitat      
Hey,
Valueobjekte sind z.B. leichter zu kopieren. Soll heißen, wenn du ein neues Objekt erstellen möchtest welches nur bei ein oder 2 Proberties andere Werte besitzt ist dies schnell machbar. Beim handle müsste man dann ein neues Objekt erstellen und die Properties anpassen (copyobj ist ja nur für GUI Komponenten).

MfG Marco
Private Nachricht senden Benutzer-Profile anzeigen
 
poloh85
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 22.06.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.06.2011, 11:13     Titel:
  Antworten mit Zitat      
Alles klar! Nochmals vielen Dank für deine Hilfe!

Gruß
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.