Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
ich muss ein für ein Taschenrechnerprogramm Klassen mit natürlichen, reellen und rationalen Zahlen anlegen.
Die rationalen hab ich schon implementiert, laufen auch ohne Probleme.
Jetzt habe ich folgende Klasse für die natürlichen Zahlen implementiert (mit den Methoden addieren usw.)
Code:
public class Natural {
int zahl;
Natural () {
zahl = 0;
}
Natural (int z) {
zahl = z;
}
public static Natural add (Natural nat1 , Natural nat2) {
Natural result = new Natural (nat1.zahl + nat2.zahl);
return result;
}
public static Natural sub (Natural nat1 , Natural nat2) {
Natural result = new Natural (nat1.zahl - nat2.zahl);
return result;
}
public static Natural mult (Natural nat1 , Natural nat2) {
Natural result = new Natural (nat1.zahl * nat2.zahl);
return result;
}
public static Natural div (Natural nat1 , Natural nat2) {
if (nat2.zahl==0) {
System.out.println("Fehler: Division durch 0");
}
Natural result = new Natural (nat1.zahl + nat2.zahl);
return result;
}
public static void print (Natural result) {
System.out.println(result.zahl);
}
}
Die reelle Klasse wollte ich eigentlich von der natürlichen erben lassen:
Code:
public class Real extends Natural {
Real () {
double zahl = 0;
}
Real (double z) {
double zahl = z;
}
}
Aber wenn ich jetzt das Hauptprogramm aufrufe, bekomme ich beim Berechnen einer reellen Zahl eine ClassCastException
Code:
public static void main(String[] args) {
double a=10.5;
double b=20.5;
Real r1 = new Real (a);
Real r2 = new Real (b);
Real result = (Real) Real.sub (r1, r2);
}
Das Ergebnis von Real.sub(...) ist vom Typ Natural und kann irgendwie nicht nach Real gecastet werden. Aber Deine Realimplementierung ist sowieso etwas fraglich. :?: Du hast zwei Konstruktoren in dennen jeweils eine Methodenvariable instanziiert wird, nach dem Konstruktoraufruf ist dann die interne Zahl von Real weiterhin 0 (aus Natural). Prinzipiell solltest Du nochmal über deine Klassen nachdenken.
Meines Erachtens brauchst Du eine Superklasse die die Methoden (add, sub...) mit dem Typen Number ermöglicht, die Subklassen implementieren dann das spezifische Verhalten für Integer, Double... (man beachte keine primitiven Datentypen mehr).
Ich hoffe das hilft erstmal weiter, ansonsten einfach nochmal posten.
In wie weit ist denn die Struktur vorgegeben, bzw. welche Klassen darfst Du/ darfst Du nicht verwenden. Dürfen es nur drei Klassen sein, oder können es beliebig viele werden (solange für jeden Datentyp eine neue Klasse existiert)?
Reicht evtl. auch nur ein gemeinsames Interface? Wie soll der Taschenrechner zwischen Eingabe unterscheiden?
Ich habe die drei Klassen Natural, Real und Rational sowie eine Klasse Calculator, in der die main-methode steht. Mehr Klassen dürfen es glaub ich nicht sein.
Die Art der Berechnung wird zu Beginn abgefragt
(also n für Natural, r für real usw.), dann zwei zahlen und dann die Operation (+ - * / ).
Wie kann ich denn ein gemeinsames Interface einbauen?