Falsche Rückgabewerte
lima-city → Forum → Programmiersprachen → Java
code
double
funktion
gleiche ergebnis
gleiche ergebnisse
hauptklasse
held
komplizierte funktion
methode
parameter
private funktion
problem
quellcode
referenz
run
schlechte idee
tag
test
verschiedene ergebnisse
wind
-
Hi.
Ich habe ein echtes Verständnistag/problem">problem in Sachen Java. Mein Programm besteht im Grunde aus drei Klassen: der Hauptklasse, einer Funktionsklasse und einer Threadklasse. Die Hauptklasse referenziert die Funktionsklasseklasse und die Threadklasse, die Threadklasse nur die Funktionsklasse. Die Funktionsklasse besitzt eine Methode, die die übergebenen Parameter verrechnet und ein Ergebnis zurück gibt. Das Problem ist folgendes: Wenn ich verschiedene Werte aus der Hauptklasse in die Funktion einsetze, dann bekomme ich auch verschiedene Ergebnisse. Setze ich verschiedene Werte aus der Threadklasse in die Funktion ein, bekomme ich immer die gleichen Werte. Ich verstehe einfach nicht, woran das liegen könnte.
Hier etwas stark gekürzten Quellcode zum besseren Verständnis:
class Funktion { public double[] computed = new double[3]; public Funktion(){} public double[] getValue(double a, double b) { computed[0] = /*komplizierte Funktion*/; computed[1] = /*komplizierte Funktion*/; computed[2] = /*komplizierte Funktion*/; return computed; } } class Nebenklasse extends Thread { private Funktion f = new Funktion(); public Nebenklasse(){} public void run() { for (int i=0;i<max;i++) { values = f.getValue(werte[i][0],werte[i][1]); // liefert immer genau das gleiche Ergebnis } } } public class Hauptklasse { private Funktion f = new Funktion(); public Hauptklasse(){} public static void main(final String args[]) { for (int i=0;i<max;i++) { values = f.getValue(werte[i][0],werte[i][1]); // liefert verschiedene Ergebnisse } Nebenklasse test = new Nebenklasse(); test.start(); } }
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Also woran das genau liegt kann ich auch noch nicht sagen. Auf jeden Fall ist aber die Idee ein Rückgabeergebnis, dass sich ändert als Klassenattribut zu benutzen eine ganz schlechte Idee. Zumindest, wenn es eine Referenz ist (Objekte und Arrays).
class Funktion { public Funktion(){} public double[] getValue(double a, double b) { double[] computed = new double[3]; computed[0] = /*komplizierte Funktion*/; computed[1] = /*komplizierte Funktion*/; computed[2] = /*komplizierte Funktion*/; return computed; } }
Wichtig wäre vllt auch den Code gleich mit den Ausgabebefehlen zu schreiben, da wir garnicht wissen, wie du überhaupt mitbekommst, dass es unterschiedliche bzw. gleiche Ergebnisse bringt.
Beitrag zuletzt geändert: 10.7.2012 19:56:44 von reimann -
reimann, du bist der Held des Tages. Du hast dir einen Kuss von meiner Schwester verdient. Ich hab mir fast gedacht, dass ein Referenzierungsfehler vorliegt, nur hab ich ihn nicht gefunden. Aber dein Post hat mir die Lösung geliefert: einfach die Methode
noch durchgetValue()
am Anfang erweitern und promt funktionierts. Zum Glück mache ich nicht ständig solche Anfängerfehler, wäre ja auch oberpeinlich....computed = new double[3];
€dit: So viele Fehler in einem einzigen Post.... Man bin ich durch den Wind gerade
Beitrag zuletzt geändert: 10.7.2012 20:52:43 von alphara -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage