Methoden Übergabe von Werten

P

PaP

Mitglied
Hallo alle zusammen,

ich habe vor ca 8 Wochen meine schulische IT Ausbildung begonnen und behandle derzeit im Fach Programmieren Java. Da der Lehrer den Unterrichtsstoff meines Erachtens nach viel zu langsam durchkaut, habe ich mich selbst etwas schlau gemacht und schon die eine oder andere Konsolenanwendung geschrieben.

Zurzeit arbeite ich an einer Klasse, die Methoden enthält, über die sich einige Dinge leichter realisieren lassen.

Hier habt ihr mal einen Auszug der Klasse mit der Methode, um die es mir jetzt geht:

Java:
import java.util.*;

public class PatMath
{
  static double[] PQ(double p, double q)
  {
    double ze1, ze2;
    double[] x = new double[3];
    ze1 = (p/2) * (p/2) - q;
    
    if(ze1 > 0)
       {
            ze2 = Math.sqrt((p/2) * (p/2) - q);
            x[1] = -p / 2 + ze2;
            x[2] = -p / 2 - ze2;
       }

    else if(ze1 == 0)
       {
            x[1] = -p / 2;
       }
       
    else if(ze1 < 0)
       {
            
       }
   
    return x;
  }

Hier ein Beispiel, wie die Methode verwendet wird

Java:
    Scanner input = new Scanner(System.in);
    double p,q;
    
    System.out.print("Geben sie P ein: ");
    p = input.nextDouble();
    System.out.print("Geben sie Q ein: ");
    q = input.nextDouble();
    
                                      //Hier wird die PatMath.PQ Methode verwendet.
    double x[] = PatMath.PQ(p, q);    //Wir übergeben die Werte p und q an die Methode und schreiben das Ergebnis in den Array x[].
                                      //Erstes Ergebnis ist x[1] zweites ist x[2]
    System.out.println(x[1]);
    System.out.println(x[2]);


So nun zu meinem Problem. Wie ihr sicherlich bemerkt habt, handelt es sich hierbei um eine Methode zur Berechnung einer quadratischen Gleichung der Form x² + px + q mit Hilfe der PQ Formel.

Wenn der Fall eintritt, dass unter der Wurzel eine Zahl > 0 steht, dann haben wir 2 Ergebnisse (x1 und x2)

Wenn der Fall eintritt, dass unter der Wurzel eine 0 steht, kommt nur ein Ergebnis raus und zwar x1 = - p/2
und hier ist das erste Problem. Ich übergebe die Werte x1 und x2 mit Hilfe eines Arrays. Wenn ich jedoch nur ein ergebnis habe möchte ich dass nur x1 übergeben wird oder alternativ x2 entweder einen String beinhaltet oder als NULL Wert übergeben wird.

Wenn der Fall eintritt, dass unter der Wurzel eine Zahl < 0 steht, bekommen wir kein Ergebnis da man von einem negativen Wert keine Wurzel ziehen kann(Not a Number).
In diesem Fall möchte ich entweder dass ebenfalls ein NULL Wert für x1 und x2 übergeben wird oder halt ein String.

Im allgemeinen kann ich mir nicht vorstellen wie ich einen String übermitteln soll denn wenn die Rechnung aufgeht wird 2 mal ein Wert des Datentyps Double an einen Zwischenspeicher des Typs Double übergeben, wie dieser dann jedoch einen String aufnehmen kann ist mir ein Rätsel(#Wahrscheinlich gehts auch gar nicht)

Ich hoffe, dass ich mein Problem verständlich formuliert habe und freue mich über Antworten :)

Liebe Grüße

PaP
 
M

Murray

Top Contributor
Wenn die Methode ein double[] liefert, dann ist damit doch noch nicht in der Singntur der Methode festgelegt, wieviele Werte darin stehen. Deshlab kannst du es doch in etwa so machen:
Java:
if ( ...) { // zwei Ergebnisse
  double[] ret = new double[2];
  ret[0] = ergebnis1;
  ret[1] = ergebnis2;
  return ret;
} else if ( ... ) { // kein Ergebnis
  double[] ret = new double[1];
  ret[0] = ergebnis;
  return ret;
} else { //
  double[] ret = new double[0];
  return ret;
}
 
P

PaP

Mitglied
Klappt wunderbar nur hab ich jetzt folgendes Problem.
Wenn ich beispielweise nur 1 Ergebnis erhalte dann befindet sich ja im Array nur ein einziger Wert. Im Hauptprogramm jedoch werden 2 Werte ausgegeben

Java:
    double x[] = PatMath.PQ(p, q);    
    System.out.println(x[0]);
    System.out.println(x[1]);

Wenn also die Fälle

Java:
ze1 == 0

oder

Java:
ze1 < 0

eintreten, bekomm ich vom Programm einen Fehler, da x[1] bzw x[0] und x[1] keine Werte beinhalten.
 
Zuletzt bearbeitet:
L

langhaar!

Bekanntes Mitglied
Du kannst die Länge des Arrays abfragen und greifst nur dann auf die Werte zu, wenn sie definiert sind.
Alternativ kannst du dir auch eine eigene Klasse schreiben, die die Ergebnisse für dich kapselt. (Z.B. über ein Attribut, welches die Anzahl der Lösungen enthält, Zugriff auf die Lösungswerte wird von der Anzahl der Lösungen gesteuert).
 
Zuletzt bearbeitet:
N

nillehammer

Gast
Die Option, bei Nicht-Lösbarkeit irgendwie einen String in den return value zu basteln hast Du leider nicht. Außerdem ist das nur vordergründig eine gute Fehlerbehandlung.

Wenn die Gleichung lösbar ist, wird auf jeden Fall ein Array returned. Manchmal mit zwei Elementen, manchmal nur mit einem. Du musst also eine Ausgabe programmieren, die mit beidem zurecht kommt. Deine fixen Zugriffe kommen da nicht in Frage. Eher eine (zugegeben recht kurze) for-Schleife. Etwa so:
[Java]
System.out.println("Anzahl möglicher Lösungen: " + x.length);
for (double value : x) {
System.out.println(value);
}
[/Java]

Nun zu dem Sonderfall, dass kein Ergebnis vorliegt. Hier sind jetzt eigentlich nur zwei Varianten denkbar:
- Deine Methode liefert null zurück. Dann kann man bei der Ausgabe wenigstens mit if(x!=null) prüfen.
- Du schmeißt innerhalb Deiner PQ-Methode eine RuntimeException mit aussagefähiger Message (etwa: "Gleichung nicht lösbar ze1 kleiner 0!") oder sowas.
Dazu, was der bessere Weg ist, kann man lang und breit diskutieren. Ich präferiere die zweite Methode. Bei der ersteren müsste der Aufrufer Deiner Methode immer berücksichtigen, dass evtl. null zurück kommt. Tut er das nicht, bekommt er eine nichts sagende NullPointerException und darf sich dann durch den Code der PQ-Methode wühlen, um herauszufinden wieso. Bei der zweiten Methode bekommt er zwar auch eine Exception aber wenigstens eine aussagefähige Fehlermeldung. Außerdem hast Du dann auch im Code der PQ-Methode an genau der richtigen Stelle quasi für lau dokumentiert, dass ze1<0 heißt, dass die Gleichung nicht lösbar ist. Das mag zwar für Dich im Moment offensichtlich sein, aber für andere Leser und vielleicht auch für Dich, wenn Du in einem Jahr Deinen Code wieder anschaust, ist es das möglicherweise nicht.

// Edit: Als dritte Option ist mir grad auch noch was eingefallen. Du stellst Deine Methode von Arrays auf List um. Dann kannst Du je nach Gleichung eine leere Liste, eine mit einem Element oder eine mit zwei Elementen zurück liefern. Das nur, falls Dir das mit den Exceptions nicht gefällt.

//Edit2: Wenn ich's mir Recht überlege, gefällt mir die Lösung mit der List am besten. Null zurück geben ist immer anfällig für Fehler (Es gibt sogar Gurus, die sagen: "Never return null"). Das schmeißen einer RuntimeException soll eigentlich einen Fehlerzustand anzeigen. Aber, dass eine Gleichung nicht lösbar ist, ist ja eigentlich kein Fehler sondern ein valides Ergebnis. Deswegen finde ich das mit List am besten.
 
Zuletzt bearbeitet von einem Moderator:
M

Murray

Top Contributor
// Edit: Als dritte Option ist mir grad auch noch was eingefallen. Du stellst Deine Methode von Arrays auf List um. Dann kannst Du je nach Gleichung eine leere Liste, eine mit einem Element oder eine mit zwei Elementen zurück liefern. Das nur, falls Dir das mit den Exceptions nicht gefällt.
Das ist dann doch genau wie beim Array; auch dort bekommt man im nichtlösbaren Fall ein leeres Array.
 
N

nillehammer

Gast
Murray hat gesagt.:
Das ist dann doch genau wie beim Array; auch dort bekommt man im nichtlösbaren Fall ein leeres Array.
Soo, schnell mal meinen Blödsinn gelöscht. :D Stimmt natürlich. Krass seit 8 Jahren programmier ich Java und ich hab noch nie versucht, "new double[0]" oder einfach "{}" zu machen...
Das ist dann meine neue Lieblingslösung.
 
Zuletzt bearbeitet von einem Moderator:
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Übergabe von Werten (zweidimensionales Array) aus einer Methode an zweidimensionales Array in main() Java Basics - Anfänger-Themen 3
M Übergabe von Werten Java Basics - Anfänger-Themen 10
E Übergabe von werten aus einem JDialog Java Basics - Anfänger-Themen 4
M Problem bei der Übergabe von Werten Java Basics - Anfänger-Themen 7
D Fragen zu Methoden und Übergabe von Werten Java Basics - Anfänger-Themen 4
D Problem bei Übergabe von Werten an eine Methode Java Basics - Anfänger-Themen 2
K Übergabe des Wertes einer Variable aus main() in eine Klassenmethode Java Basics - Anfänger-Themen 8
S Übergabe von Arrays an Methoden Java Basics - Anfänger-Themen 20
Curtis_MC Parameter-Übergabe bei Klassen und Methoden Java Basics - Anfänger-Themen 12
D Methode mit Übergabe double und Rückgabe String Java Basics - Anfänger-Themen 2
L Methoden Übergabe von Parameter Java Basics - Anfänger-Themen 3
K Java Problem mit Übergabe von argumenten Java Basics - Anfänger-Themen 3
J Übergabe von Parametern an andere Methoden Java Basics - Anfänger-Themen 5
D Probleme mit der Übergabe einer BorderPane Java Basics - Anfänger-Themen 2
R Methoden Übergabe von einer Methodenvariable Java Basics - Anfänger-Themen 3
arjoopy Kapselung Übergabe von Objekten aus ArrayList Java Basics - Anfänger-Themen 4
C Erste Schritte Übergabe von Klassen Java Basics - Anfänger-Themen 2
C Methoden Objekte und Methode und Übergabe Java Basics - Anfänger-Themen 4
O Übergabe in eine andere Klasse Java Basics - Anfänger-Themen 3
M Übergabe / Rückgabe Java Basics - Anfänger-Themen 6
S Kapselung Objekt bei Übergabe an Konstruktor nicht initalisiert Java Basics - Anfänger-Themen 3
T Problem bei Übergabe von Variablen Java Basics - Anfänger-Themen 1
fLooojava Probleme bei der Übergabe einer Variable Java Basics - Anfänger-Themen 14
A Problem mit set.Text und übergabe Java Basics - Anfänger-Themen 2
R Vererbung Übergabe von Variablen der Superklasse an Subklasse mit "extends" Java Basics - Anfänger-Themen 5
S OOP Übergabe eines Objektes? Java Basics - Anfänger-Themen 1
fLooojava OOP Übergabe/Output in Textfield Java Basics - Anfänger-Themen 4
Furtano OOP Memento Pattern | übergabe einer Kopie des Arrays Java Basics - Anfänger-Themen 0
U Übergabe von Objekten Java Basics - Anfänger-Themen 0
J ArrayList toString() Übergabe Fehler Java Basics - Anfänger-Themen 2
J Problem bei Param.übergabe und dem erstellen von JButtons Java Basics - Anfänger-Themen 4
S Übergabe Java Basics - Anfänger-Themen 14
S Klassen Array: Übergabe von Klasse zur Main Java Basics - Anfänger-Themen 8
A NullPointerException bei Übergabe eines Array Java Basics - Anfänger-Themen 8
feardorcha Methodenaufruf Übergabe- und Rückgabewert Java Basics - Anfänger-Themen 5
D Klassen Problem - Übergabe an Konstruktor von Superklasse Java Basics - Anfänger-Themen 2
D Objekt Übergabe Java Basics - Anfänger-Themen 12
M Array Übergabe Java Basics - Anfänger-Themen 17
W Übergabe Stringzeilen von serieller Schnittstelle in andere Klasse Java Basics - Anfänger-Themen 3
B Übergabe Dateiname (String) an andere Klasse Java Basics - Anfänger-Themen 4
F Variablen Übergabe von eingelesenen Variablen in neue Klasse Java Basics - Anfänger-Themen 15
M Fragen zu Methoden (void/return), Übergabe von Parametern Java Basics - Anfänger-Themen 3
M problem mit string übergabe an klasse Java Basics - Anfänger-Themen 10
A übergabe wert in andere klasse Java Basics - Anfänger-Themen 8
A Übergabe von Variablen zu Paintmethode Java Basics - Anfänger-Themen 2
N Array Übergabe Java Basics - Anfänger-Themen 9
L Klassen Parameter Übergabe Java Basics - Anfänger-Themen 12
A OOP Übergabe eines Wertes an den enum Konstruktor Java Basics - Anfänger-Themen 12
O Übergabe von Variablen Java Basics - Anfänger-Themen 9
Darth Simple Übergabe eines Strings an eine Methode Java Basics - Anfänger-Themen 3
A Frage zur Übergabe von Strings Java Basics - Anfänger-Themen 9
N Übergabe problem Java Basics - Anfänger-Themen 6
M Übergabe von VM Argumenten Java Basics - Anfänger-Themen 4
J Übergabe einer ArrayList an mehrere Threads Java Basics - Anfänger-Themen 3
A konstruktor übergabe fehler Java Basics - Anfänger-Themen 8
J Übergabe eines Arrays als Parameter Java Basics - Anfänger-Themen 2
G JFileChooser übergabe an Directory Java Basics - Anfänger-Themen 4
S Übergabe von Frame-Objekt - kritisch? Java Basics - Anfänger-Themen 7
L JTabbedPane, richtige Übergabe von Tabs Java Basics - Anfänger-Themen 18
Z BigInteger Methoden und deren Übergabe Java Basics - Anfänger-Themen 3
K Übergabe einer im EventListener definierte variablen Java Basics - Anfänger-Themen 2
M Übergabe von Variablen in eine Klasse Java Basics - Anfänger-Themen 13
G Wieso ist eine String-Übergabe keine by-reference-Zuweisung? Java Basics - Anfänger-Themen 7
G Übergabe von Parametern an JSP Java Basics - Anfänger-Themen 3
S Veränderung von Protected Daten durch Übergabe? Java Basics - Anfänger-Themen 3
K Übergabe der Variable für Farbe Java Basics - Anfänger-Themen 6
G List<.> nach Übergabe vergleichen? Java Basics - Anfänger-Themen 3
G Übergabe Variablen von Servlet zu JSP? Java Basics - Anfänger-Themen 4
M [SOLVED]parameter übergabe an objekte Java Basics - Anfänger-Themen 2
R Beiß mir die Zähne aus an der Request-Parameter-Übergabe! Java Basics - Anfänger-Themen 10
lin Übergabe an JPanel-Klasse Java Basics - Anfänger-Themen 3
S NullPointerException bei Array-Übergabe Java Basics - Anfänger-Themen 3
Z übergabe von string[] an konstruktoren oder methoden Java Basics - Anfänger-Themen 3
D Übergabe von Variablen Java Basics - Anfänger-Themen 11
W Variabeln Übergabe Java Basics - Anfänger-Themen 14
W übergabe des aktuellen wertes in andere Klasse Java Basics - Anfänger-Themen 3
F Großes Problem: Vector-Übergabe Java Basics - Anfänger-Themen 7
F Übergabe Vaterframe mit this und Fehlermeldung. Java Basics - Anfänger-Themen 2
G Übergabe von Variablenwerten zwischen Methoden Java Basics - Anfänger-Themen 4
H Übergabe eines Wertes an eine Bean --> Bean leer Java Basics - Anfänger-Themen 6
T Array-Übergabe Java Basics - Anfänger-Themen 7
M Windows Pfad-Übergabe.. Java Basics - Anfänger-Themen 6
S String mit Konstruktor (per Übergabe) initialisieren Java Basics - Anfänger-Themen 10
N Speichern von Werten in Variablen nach Schließen des Programms Java Basics - Anfänger-Themen 3
O zwei Arrays nach Werten durchsuchen und zusammenfügen Java Basics - Anfänger-Themen 3
B Rückgabe von zwei Werten: String und double Java Basics - Anfänger-Themen 14
Henri Vergabe von undeklarieten Werten Java Basics - Anfänger-Themen 64
V Schleife für das Einlesen von Werten für int Variablen, die Bestandteil von Arrays sein sollen Java Basics - Anfänger-Themen 16
E OOP Array anlegen mit unterschiedlichen Werten Java Basics - Anfänger-Themen 8
R Eingabe String umwandeln zu Integer Werten Java Basics - Anfänger-Themen 8
M Speichern von Werten in Array Java Basics - Anfänger-Themen 1
P Input/Output Bestimmte Anzahl von Werten in einem Array an Methode übergeben Java Basics - Anfänger-Themen 2
Bregedur Methoden Matcher und Pattern bei sich wiederholenden Werten Java Basics - Anfänger-Themen 1
M Java Arrays mit Werten initialisieren Java Basics - Anfänger-Themen 3
G Interpolation von Werten im 3D-Raum Java Basics - Anfänger-Themen 3
N Zählen von Rationalen Werten eines Arrays Java Basics - Anfänger-Themen 10
R Objekt erstellen - Attribute mit mehreren Werten Java Basics - Anfänger-Themen 1
F JButton [] mit Werten hinterlegen Java Basics - Anfänger-Themen 10
L Frage zur Rückgabe von Werten bei Methoden Java Basics - Anfänger-Themen 4
L Array mit Werten belegen Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Anzeige

Neue Themen


Oben