return wert ist null :(

  • Themenstarter Themenstarter Joola
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
J

Joola

Gast
Hallo Leute,

ich hab da ein Problem an dem ich schon ziemlich lange sitze und ich bekomms einfach nicht hin.

Das Problem ist folgendes:
Die Methode UnterMatrix gibt mir als return-wert res = null zurück und ich verstehe nicht wieso.
Lasse ich mir res.m in der Schleife ausgeben stimmt alles, also kann man sagen die Methode funktioniert.
Ich glaube ich hab da irgendwo nen Fehler in der Matrix...

Sieht das vielleicht jemand auf den ersten Blick?



Code:
class Matrix {

	    public double[][] m;
	    public int zeilenZahl;
	    public int spaltenZahl;
	    public double res;

	Matrix (int zeilenZahl, int spaltenZahl){
		 m = new double[zeilenZahl][spaltenZahl];
	}

....

Code:
	private Matrix UnterMatrix(int x, int y) {
		Matrix res = new Matrix(zeilenZahl-1, spaltenZahl-1);
		for(int i = 0; i < zeilenZahl-1; i++)
			for(int j = 0; j < spaltenZahl-1; j++)
				res.m[i][j] = m[i<x?i:i+1][j<y?j:j+1];
		return  res;
	}


Schönen Gruß
Joola
 
Hi,

ich kanns mir auch nicht erklären...
Aber wenn ich das hier abläuft kommt "RETURN null" raus

Code:
 private Matrix UnterMatrix(int x, int y) {
      Matrix res = new Matrix(zeilenZahl-1, spaltenZahl-1);
      for(int i = 0; i < zeilenZahl-1; i++)
         for(int j = 0; j < spaltenZahl-1; j++)
            res.m[i][j] = m[i<x?i:i+1][j<y?j:j+1];

System.out.println("RETURN " +res);

      return  res;
   }


:-(
 
Danke für deine Antwort! Ja das ist es 🙂

Code:
public String toString(){
		
    return null;
	}


Der Code war zum Teil vorgegeben und diesen Abschnitt hatte ich noch nicht behandelt. Allerdings bin ich jetzt nicht sicher was ich da hinschreiben soll. Hab zwar danach gesucht, aber ganz schlüssig ist es mir nicht...

Wäre über jeden Tipp dankbar!
 
Ist doch erstmal egal, das ist nur für eine Ausgabe.
Wichtig ist die Tatsache das eben nicht null zurückgegeben wird.
 
Hi,

ich hab einiges versucht, leider immer noch ohne Erfolg.
Jetzt habe ich den toString komplett gelöscht, damit bekomme ich dann folgende Ausgabe für res:

RETURN @171f189

Bin für jeden weiteren Tipp dankbar =)

Gruß
 
Das ist ja auch völlig ok, das ist Klassenname + Hashcode, die Standard toString Implementierung.
Ich dachte es geht dir um die Methode, da ist doch die Ausgabe egal.
Was möchtest du denn haben?
 
Hey Wildcard!

also die Schleife belegt res.m mit Werten wie
1.0
2.0
...

Diese Werte möchte ich mit res übergeben und sie mir in der Console anzeigen lassen.

Danke schonmal für deine Hilfe, das Problem treibt mich echt in den Wahnsinn gerade
:bahnhof:

Code:
 private Matrix UnterMatrix(int x, int y) {
      Matrix res = new Matrix(zeilenZahl-1, spaltenZahl-1);
      for(int i = 0; i < zeilenZahl-1; i++)
         for(int j = 0; j < spaltenZahl-1; j++)
            res.m[i][j] = m[i<x?i:i+1][j<y?j:j+1];
      return  res;
   }



Gruß
 
Dann musst du eine Methode schreiben die über das Array deiner Matrix läuft und entsprechend deinen Vorstellungen Werte ausgibt.
 
Hm...

genaugenommen sieht das ganze so aus:

Code:
	double determinate() throws IllegalStateException {
			if (zeilenZahl != spaltenZahl){
			 throw new IllegalStateException("Matrix nicht Quadratisch");
			}
			if (zeilenZahl == 1){
			 return m[0][0];
			}else {
			 double res = 0.0;
			 int f = -1;
			 
			 for (int i = 0; i < zeilenZahl; ++i) {
			  f = f * -1;
			  res = f * (m[i][0] * coMatrix(i,0).determinate()+res);
			   System.out.println("Determi"+res);
			}		
			return res;
			}}

Code:
private Matrix coMatrix(int x, int y) {
		Matrix res = new Matrix(zeilenZahl-1, spaltenZahl-1);
		for(int i = 0; i < zeilenZahl-1; i++)
			for(int j = 0; j < spaltenZahl-1; j++)
				res.m[i][j] = m[i<x?i:i+1][j<y?j:j+1];
		System.out.println("RETRUN" +res);
		return res;
	}


Ich dachte eigentlich das nur ein kleiner Fehler irgendwo drinsteckt und res dehalb nicht in determinante() ankommt.

Vielen Dank schonmal für deine Tipps 🙂
 
Hallo Wildcard,

irgendwie klappts immer noch nicht so ganz. Ich habe die toString Methode jetzt mal ganz rausgenommen. Wenn ich mir das hier ausgeben lasse bekomme ich nur diese zeichen:

Code:
private Matrix coMatrix(int x, int y) {
		Matrix res = new Matrix(zeilenZahl-1, spaltenZahl-1);
		for(int i = 0; i < zeilenZahl-1; i++){
			for(int j = 0; j < spaltenZahl-1; j++){
				
				res.m[i][j] = m[i<x?i:i+1][j<y?j:j+1];
				}}
	   System.out.println("RES"+res);
		return res;
	
	}

RES Matrix@17cec96


Gruß
 
Ich hab doch schon versucht dir zu erklären das es sich um die ganz Normale Ausgabe von toString handelt.
Wenn du was anderes willst, implementiers.
Code:
public String toString(){
    return "blubb";
}

Jetzt kommt da nicht mehr RES Matrix@17cec96, sonder RES blubb raus.
Keiner hier kann wissen wie die Ausgabe denn nun genau aussehen soll, also musst du das schon alleine hinbekommen.
Bau dir in toString einen String zusammen der alle Informationen die du bei System.out sehen willst enthält, und gut ist.
 
Hallo,

nochmals danke für deine Antwort. Es geht vielmehr darum die Werte in eine andere Methode zu übergeben um damit eine Rechnung durchzuführen.
In Determinate wir coMatrix aufgerufen, aber coMatrix gibt kein brauchbares Ergebniss zurück obwohl res.m[][] mit den richtigen Werten befüllt wurde...

Sorry wenn ich nerve...
 
Anonymous hat gesagt.:
In Determinate wir coMatrix aufgerufen, aber coMatrix gibt kein brauchbares Ergebniss zurück obwohl res.m[][] mit den richtigen Werten befüllt wurde...
Doch!
Die Werte stehen in deinem Matrix Objekt und das gibst du zurück!
 
Aber warum gibt bekomme ich das Ergbniss 0.00 bei folgendem in Determ.?

Code:
res =  coMatrix(i,0).determinate();
			   System.out.println("Test"+res);
 
Weil es das richtige Ergebnis ist? Weil eine deiner Methoden falsch rechnet? Weil du das Matrix Objekt falsch benutzt/befüllt hast?
Was soll man dazu sagen, ich weiß ja nichtmal was rauskommen sollte :wink:
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben