Aufruf von Klasse verändert ungewollt Werte

Status
Nicht offen für weitere Antworten.

deeuu

Neues Mitglied
Hallo,

ich habe eine Matrix
Code:
          double A[][] = {{-1,0,0},{0,-1,0},{0,0,-1},{1,1,1}};
	       double B[]   = {0,0,0,1};
gegeben. Ich möchste nun dass mein Programm daraus alle Kombinationen von 3x3 Matrizen macht.
Aus der Matrix A wird also:
-1.0 0.0 0.0
0.0 -1.0 0.0
0.0 0.0 -1.0

-1.0 0.0 0.0
0.0 -1.0 0.0
1.0 1.0 1.0

-1.0 0.0 0.0
0.0 0.0 -1.0
1.0 1.0 1.0

0.0 -1.0 0.0
0.0 0.0 -1.0
1.0 1.0 1.0

Das funktioniert auch wunderbar. Nun will ich jede dieser Teilmatritzen an eine Klasse übergeben welche mir diese Gleichungssysteme löst und die Lösung dann zurückgibt. Die Klasse LGS das hab ich von
http://www.java-forum.org/de/viewtopic.php?p=435704 übernommen.
Das funktioniert leider aber nicht. Nachdem LGS aufgerufen wird verändert sich meine Matrix a, nämlich in:

-1.0 0.0 0.0
-0.0 -1.0 0.0
-0.0 -0.0 -1.0

-1.0 0.0 0.0
0.0 -1.0 0.0
-1.0 -1.0 1.0

-1.0 0.0 0.0
0.0 0.0 -1.0
1.0 -1.0 1.0

0.0 -1.0 0.0
0.0 -0.0 -1.0
1.0 -1.0 1.0

Ich will eigentlich nur dass ich die Matrix a an LGS übergebe, LGS dann die Lösung zurückgibt und die Schleife weiterläuft, ohne das in der Klasse "Schnittpunkt" irgendwas verändert wird. Wie mach ich das?

Code:
static  Punkt[] Schnittpunkt(double[][] array,double [] erg,int i)
	{
		Punkt Schnittpunkte []= new Punkt[20];
		double a [][]=new double[3][3];
		double b []=new double[3];
		int zaehler=-1;
		
		for(int j=0;j<=i-3;j++)
		{
		    for(int k=j+1;k<=i-2;k++) 
		    {
		    	for(int l=k+1;l<=i-1;l++)             //Diese 3 Schleifen erzeugen die Teilmatrizen.
			    {                                           // Das funktioniert soweit auch  :)
		           a[0]=array[j];
		           a[1]=array[k]; 
		           a[2]=array[l];
		      
		           b[0]=erg[j];
		           b[1]=erg[k];
		           b[2]=erg[l];
		                
		      double[] Loesung = LGS.solve(a, b);                 //Hier ist das Problem: Nachdem LGS aufgerufen wird
		                                                          // werden die Teilmatrizen nicht mehr richtig erzeugt.
		         double x=Loesung[0];
		         double y=Loesung[1];
		         double z=Loesung[2];
		        
		    zaehler++;

		    Schnittpunkte[zaehler] = new Punkt(x, y, z);
			    }
		    }
	    }
		return Schnittpunkte;
	}
 
S

SlaterB

Gast
übergib nicht a und/ oder b an LGS.solve(), sondern Kopien deiner Matrizen,
oder ändere die solve()-Methode, so dass sie sich selber die Parameter kopiert
 

diggaa1984

Top Contributor
Code:
public static double[] solve(double[][] A, double[] b) 
   { 
      double[][] B = A.clone(); 
      double[] x = b.clone();
      <...>
   }

sollte das damit nicht schon geschehen? Hierbei reicht ja auch ne flache Kopie, sind ja nur double drin
 
S

SlaterB

Gast
oh, gar nicht gesehen,

leider wird nur auf erster Ebene flach kopiert, A und B sind zwar unterschiedliche Objekte,
aber A[0], das double[] der Länge 3, ist gleich B[0], A[1] == B[1], usw ;)
 

diggaa1984

Top Contributor
aso aber quasi A[0][1] wird nicht mitkopiert? Würde dabei eine default-initialisierung mit 0.0 erfolgen? denke mal schon das java es mitbekommt das A 2 dimensionen hat. nur clone orientiert sich nur an der 1. :?:
 
S

SlaterB

Gast
> aso aber quasi A[0][1] wird nicht mitkopiert?

da A[0] nur ein Objekt ist, welches in beiden Arrays drinsteckt,
macht deine Aussage keinen rechten Sinn,

A[0][1] bleibt wie es ist und ist trotzdem auch in B drin, denn B entspricht weitgehend A

> denke mal schon das java es mitbekommt das A 2 dimensionen hat.

nicht wirklich, es wird gar nicht nachgeschaut
 

deeuu

Neues Mitglied
Mit clone() hatte ich schonmal alles mögliche probiert ... hat alles nicht funktioniert.
Ich habs jetzt einfach damit gemacht:
Code:
for(int m = 0; m <= 2; m++) 
{
  for(int n = 0; n <= 2; n++) 
	 {
		A[m][n]=a[m][n];
		B[m]=b[m];
	 }
		   	      
}
[/code]

Die Kopien übergeb ich dann an LGS ... und siehe da es funktioniert :D

Das ist bestimmt nicht der eleganteste Weg aber für meine Zwecke funktionierts.
Danke für die schnellen Antworten.

Mfg
 

diggaa1984

Top Contributor
SlaterB hat gesagt.:
leider wird nur auf erster Ebene flach kopiert, A und B sind zwar unterschiedliche Objekte,
aber A[0], das double[] der Länge 3, ist gleich B[0], A[1] == B[1], usw ;)

aso ich habs nu glaube ... also A[0] und B[0] sind verschieden, aber B[0][1] zeigt auf das selbe Objekt wie A[0][1] .. und daher eine Änderung in B = Änderung am original
 
S

SlaterB

Gast
A[0] und B[0] sind exakt dasselbe Objekt, deshalb ist auch B[0][1] dasselbe wie A[0][1],
in diesem Fall allerdings kein Objekt sondern eine double-Variable
 

diggaa1984

Top Contributor
aso, also bewirkt clone gar nicht das was ich mir die ganze zeit darunter verstehe, nämlich das der inhalt von A[0] damit an B[0] kopiert wird, und somit doppelt vorliegen würde.
 

diggaa1984

Top Contributor
warum sagst das nich gleich :D ... hm muss ich also nochma kieken was da genau passiert.
danke, bin ich wieder schlauer
 
S

SlaterB

Gast
SlaterB hat gesagt.:
leider wird nur auf erster Ebene flach kopiert, A und B sind zwar unterschiedliche Objekte,
aber A[0], das double[] der Länge 3, ist gleich B[0], A[1] == B[1], usw ;)
 

diggaa1984

Top Contributor
ja is mir schon klar, mir fehlte nur das gedankliche verständnis :D
:### Note that all arrays are considered to implement the interface Cloneable. Otherwise, this method creates a new instance of the class of this object and initializes all its fields with exactly the contents of the corresponding fields of this object, as if by assignment; the contents of the fields are not themselves cloned. Thus, this method performs a "shallow copy" of this object, not a "deep copy" operation. ???:L

also .. da das ganze n 2-dimensionales feld ist .. und A[0] damit kein einfacher Typ sondern wiederum ein quasi komplexes Array .. wird dieses Array an Stelle A[0] nicht weiter kopiert, sondern der Wert von A[0] landet in B[0] und damit referenziert B[0] das selbe Array wie A[0]??
Wären A und B eindimensionale Felder vom Typ double, wären sie exakte Kopien und A würde sich durch B net verändern. :meld:
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Aufruf von statischen Methoden einer anderen Klasse Java Basics - Anfänger-Themen 15
B EJB und Arquillian - bekomme Nullpointer Exception beim Aufruf der EJB Klasse Java Basics - Anfänger-Themen 40
R Methoden NPE beim Aufruf einer Methode einer anderen Klasse Java Basics - Anfänger-Themen 4
D Interface Frame doppelt durch Aufruf der GUI Klasse Java Basics - Anfänger-Themen 1
Henri Aufruf von getX() und getY() aus der Super klasse Objekt() Java Basics - Anfänger-Themen 3
D Aufruf einer Methode einer anderen Klasse Java Basics - Anfänger-Themen 39
P Aufruf Methode anderer Klasse Java Basics - Anfänger-Themen 5
S Aufruf Einer Methode aus einer anderen Klasse - Static Fehler Java Basics - Anfänger-Themen 4
S Überladener Konstruktor und aufruf aus eigener Klasse Java Basics - Anfänger-Themen 2
Q Aufruf einer Klasse in einem Package Java Basics - Anfänger-Themen 7
T Aufruf einer Methoden aus einer Util-Klasse mit privatem Konstruktor Java Basics - Anfänger-Themen 7
K Methoden aufruf von einer anderen Klasse Java Basics - Anfänger-Themen 7
L Mehrere Objekte einer Klasse aber nur einmal Konstruktor aufruf? Java Basics - Anfänger-Themen 2
M Probleme beim Aufruf von Listener in anderer Klasse Java Basics - Anfänger-Themen 9
L abgeleitete Klasse - Aufruf mit vererbter Klasse? Java Basics - Anfänger-Themen 2
G Problemme mit: Aufruf einer Klasse aus einem Frame Java Basics - Anfänger-Themen 5
T Aufruf von setBorder aus anderer Klasse Java Basics - Anfänger-Themen 3
S Aufruf von Methode bei geschachtelter Klasse Java Basics - Anfänger-Themen 2
T Aufruf der Methode einer Oberklasse, wenn sie in der Unterklasse überschrieben ist. Polymorphie. Java Basics - Anfänger-Themen 2
M Konstruktor-Aufruf im Konstruktor, aber nicht am Anfang? Java Basics - Anfänger-Themen 4
P Array-Objekte-Aufruf Java Basics - Anfänger-Themen 22
Agent4nobody Programmstart durch aufruf des interpreters funktioniert nicht Java Basics - Anfänger-Themen 14
G Main Methode wird beim ersten Aufruf nicht richtig ausgeführt Java Basics - Anfänger-Themen 1
K Erste Schritte Stream-Aufruf vereinfachen Java Basics - Anfänger-Themen 3
sashady ursprüngliche Array-Werte bei erneutem Aufruf? Java Basics - Anfänger-Themen 7
Y Aufruf von Methode nicht möglich. Java Basics - Anfänger-Themen 2
D Aufruf von mehreren Activities bringt die app zum Absturz Java Basics - Anfänger-Themen 5
L Methoden Wie Löse ich ext Methoden Aufruf Fehler? Java Basics - Anfänger-Themen 3
X Methode bei mehrfachen Aufruf kein Effekt Java Basics - Anfänger-Themen 3
H Aufruf von Methoden durch Methoden Java Basics - Anfänger-Themen 3
O Verwirrt beim Java Collection Framework aufruf! Java Basics - Anfänger-Themen 9
T Konsolenscanner startet nicht durch Aufruf von Actionlistener Java Basics - Anfänger-Themen 4
B OOP While Schleife läuft Endlos durch externen aufruf Java Basics - Anfänger-Themen 2
E Vererbung super-Methoden Aufruf Java Basics - Anfänger-Themen 3
D Interface Wieso Aufruf aller Methoden eines Interfaces? Java Basics - Anfänger-Themen 11
J Aufruf einer Methode über einen String Java Basics - Anfänger-Themen 11
A Aufruf von Konstruktor , obwohl 2 Parameter weggelassen werden Java Basics - Anfänger-Themen 7
A Aufruf von Konstruktor , obwohl 2 Parameter weggelassen werden Java Basics - Anfänger-Themen 0
H Rekursiver Aufruf Java Basics - Anfänger-Themen 8
E Daten dem Super Aufruf übergeben Java Basics - Anfänger-Themen 3
E Aufruf auf Objekt mit übergebenem Wert? Java Basics - Anfänger-Themen 7
D Aufruf einer statischen Variable Java Basics - Anfänger-Themen 1
T static String Variable wird nur beim ersten aufruf durch eine Funktion geändert. Java Basics - Anfänger-Themen 16
C Erste Schritte Fehler beim *.class Aufruf über cmd.exe Java Basics - Anfänger-Themen 9
M Speichern von Objekten - Verfügbarkeit bei erneutem Aufruf Java Basics - Anfänger-Themen 3
S PHP Aufruf mit mehreren Variablen Java Basics - Anfänger-Themen 2
J Klassen Reihenfolge beim Aufruf von Klassen Java Basics - Anfänger-Themen 1
V Problem Aufruf einer Methode in einer Methode Java Basics - Anfänger-Themen 1
O Frage zum Aufruf überladener Methoden Java Basics - Anfänger-Themen 4
G funktions Aufruf aus GUI Java Basics - Anfänger-Themen 9
A Fehlermeldung beim aufruf der main Methode Java Basics - Anfänger-Themen 17
I Rückgabe und Aufruf einer Methode innerhalb einer anderen Methode Java Basics - Anfänger-Themen 5
W Zeitversetzter Aufruf der Methoden Java Basics - Anfänger-Themen 6
M Unbekannte Nummer bei Aufruf der toString Methode Java Basics - Anfänger-Themen 3
D Methode mit mehren Rekursiven aufrufen in Methode mit einem Rekursiven Aufruf umwandeln! Java Basics - Anfänger-Themen 1
F signiertes Applet fkt. nicht bei lokalem Aufruf Java Basics - Anfänger-Themen 2
A externer repaint Aufruf Java Basics - Anfänger-Themen 9
H Aufruf einer Instanzmethode funktionert nicht. Java Basics - Anfänger-Themen 6
A Konstruktor Aufruf Java Basics - Anfänger-Themen 4
Pentalon Ein Aufruf den ich nicht verstehe Java Basics - Anfänger-Themen 11
D dynamischer Aufruf Java Basics - Anfänger-Themen 2
N Aufruf der Methode Java Basics - Anfänger-Themen 16
L Next()-Aufruf zweimal innerhalb einer While-Schleife bei ListIterator Java Basics - Anfänger-Themen 10
A Aufruf der paint() Methode Java Basics - Anfänger-Themen 3
K Problem beim Array aufruf Java Basics - Anfänger-Themen 4
P URL für Lokalen Aufruf Java Basics - Anfänger-Themen 5
C OOP Aufruf von Methoden höherer Sichtbarkeit Java Basics - Anfänger-Themen 10
T Client-Fenster bei Aufruf unvollständig Java Basics - Anfänger-Themen 12
A Aufruf von Konstruktor aus Basisklasse Java Basics - Anfänger-Themen 7
O OOP super aufruf 2 objekte? Java Basics - Anfänger-Themen 3
D Array Methoden Aufruf. Java Basics - Anfänger-Themen 14
L Klassen Aufruf einer ueberschreibbaren Methode im Konstruktor Java Basics - Anfänger-Themen 4
M OOP Aufruf vieler Getter Methoden abkürzen? Java Basics - Anfänger-Themen 7
C Aufruf funktioniert nicht Java Basics - Anfänger-Themen 10
G Aufruf externer Funktionen Java Basics - Anfänger-Themen 7
C Exception beim Aufruf einer Methode Java Basics - Anfänger-Themen 2
A Aufruf einer Methode Java Basics - Anfänger-Themen 3
J Aufruf von Funktionen in *.jar mittels Eclipse Java Basics - Anfänger-Themen 4
T Shell Script Aufruf mit Java Java Basics - Anfänger-Themen 7
R Aufruf statische Methode Java Basics - Anfänger-Themen 7
M Aufruf zum Objekt erstellen aus String Java Basics - Anfänger-Themen 5
K OOP Nachteil bei direktem Aufruf von run() auf Thread-Objekten Java Basics - Anfänger-Themen 2
J Aufruf der Methode Java Basics - Anfänger-Themen 6
P OOP Aufruf eines Interfaces Java Basics - Anfänger-Themen 4
E Konstruktor-Aufruf Java Basics - Anfänger-Themen 9
C Aufruf einer Funktion Java Basics - Anfänger-Themen 3
W Multiplikation mit rekursivem Aufruf Java Basics - Anfänger-Themen 17
C exec Aufruf mit Leerzeilen im Pfad Java Basics - Anfänger-Themen 3
L Methoden aufruf Java Basics - Anfänger-Themen 3
M methoden aufruf klappt nicht Java Basics - Anfänger-Themen 6
M Frage zum Aufruf eines Applets aus einer HTML - Datei Java Basics - Anfänger-Themen 3
N Methoden aufruf Java Basics - Anfänger-Themen 7
S super() aufruf ausgabe Java Basics - Anfänger-Themen 3
F Aufruf von Methoden hintereinander gechachtelt??? Java Basics - Anfänger-Themen 8
E Mehrfache print ausgabe ohne Schleife oder Rekursiven aufruf? Java Basics - Anfänger-Themen 48
radiac CMD Windowskonsole und java aufruf in Vista 64 Java Basics - Anfänger-Themen 2
D Aufruf von WGET aus Java Java Basics - Anfänger-Themen 5
F Variabler Aufruf einer Methode Java Basics - Anfänger-Themen 10
F Methoden Aufruf Java Basics - Anfänger-Themen 4
T aufruf methode in methode macht probleme Java Basics - Anfänger-Themen 9

Ähnliche Java Themen

Neue Themen


Oben