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 hab nen programm geschrieben, welches einen einfachen Taschenrechner darstellt. Ich hab nen Object Array darin und wollte nen double darin speichern. Das funkionierte auch auf meinem Eclipse 3.4.0. Aber ich lern die Sprache gerade auch in der Schule und wollte das Programm dort auch testen. Dort haben wir Eclipse 3.2.0. Das Programm lief bei mir zuhause einwandfrei. In der Schule jedoch kriegt ich bei dem Versuch ein double in einem Object Array zu speichern den Fehler (ich bin mir leider nich mehr ganz genau sicher) "Can't convert from double to Object"
Ich versteh nicht ganz:
1. Müsste es nicht eigentlich möglich sein alles (Objekte und primitive Datentypen) in einem Object Array speichern zu können?
2. Wieso gibt mir überhaupt das eine Eclipse nen Fehler aus und das andere nicht?
Das liegt vermutlich an unterschiedlichen Java-Versionen. Du kannst nämlich generell keinen primitiven Datentyp in ein Object[] tun. Allerdings gibt es seit Java 5 einen Mechanismus namens Autoboxing - da kannst du das so schreiben, und der Compiler ergänzt dann implizit noch eine Umwandlung in ein passendes Objekt - in diesem Fall in ein java.lang.Double.
Da wo dein Original-Code nicht funktioniert, ist wahrscheinlich ein uraltes Java (vor 1.5) installiert, und ich wollte deshalb vorschlagen, es mal upzudaten, sonst hast du dauernd solche Problemchen.
Wenn Java ordentlich installiert ist, reicht es, das hier in der DOS-Konsole zu tippen, um die aktive Version rauszubekommen:
java -version
Daran liegt es wahrscheinlich nicht. Ich hatte das auch, als ich Java-Generics verwenden wollte, trotz installiertem jdk 1.6. Du selektierst dein Projekt, gehst oben in der Leiste von Eclipse auf "Run" --> "Properties", klickst auf "Java Compiler" (nicht auf das Plus davor), machst nen Haken vor "Enable project specified setting" und stellst die Compilerversion ein, mit der Eclipse dein Projekt überwachen soll.
ich muss ehrlich sagen, dass ich noch nie einen double wert als objekt in einem array gehalten habe... und ich hab schon sehr viel java code gschrieben!
warum willst du das machen? hast du verschiedene datentypen die die gemeinsam halten möchtest? zb name (String), alter (int)? dann mach ein objekt! zb Person
@ARadauer: Er möchte ja wahrscheinlich einmal Zahlen und zum anderen die Rechenzeichen dareinspeichern, was man fürn Taschenrechner halt so braucht. (Ob das so sinnig ist, hab ich keine Lust drüber nachzudenken^^), deswegen muss er wohl beides dareinspeichern (man könnte natürlich die Zahlen auch als String speichern und dann Double.parseDouble(String s) aufrufen).
@Oli: Illuvatar hatte ja vom Autoboxing geschrieben, das wäre ja im Prinziep das was du vorschlägst und das schien ja auch zu klappen, mit einer vernünftig eingestellen Eclipse-Version...
Nun Eclipse badet den Fehler bei der Programmierung aus, in dem der Compiler einen pimitiven Datentyp über seine Wrapperklasse in ein Objekt umwandelt - Autoboxing eben. Ob das sinnvoll ist, nun darüber kann man streiten, es ist bequem.
Dass aber:
Object = double;
vom Prinzip her falsch ist, ist wohl unbestritten.
um was damit machen? wir sind hier in der objekt orientierten programmierung, objekt ist so viel wie dings,
ich halte dings in einer liste dingsen um dann dings und dings zu dingsen und sie auf ein anderers dings hinzuzudingsen... hä?
das nenn ich ein ansatz bzw architektur problem...
audrücke in einer liste halten, die wiederum aus einem oder mehrern werten und einer operation bestehen, den ausdruck ann ich auswerten/ausführen, dadurch lifert er mit ein ergenis zurück, dass ich wiederum in anderen ausrücken verwenden kann, wobei für das verhalten die konkrete implementierung der operation selber zuständig ist usw.... ist schon ein besserer ansatz....
problem: lehrer die keine ahnung haben, geben schülern immer diese taschenrechner beispiel...
fakt: ein sinnvolles taschenrechner programm ist eine ziehmliche herausforderung, polymorpie, command pattern, strategy pattern.....
Nun Eclipse badet den Fehler bei der Programmierung aus, in dem der Compiler einen pimitiven Datentyp über seine Wrapperklasse in ein Objekt umwandelt - Autoboxing eben. Ob das sinnvoll ist, nun darüber kann man streiten, es ist bequem.
Dass aber:
Object = double;
vom Prinzip her falsch ist, ist wohl unbestritten.
Ich würd mich ehrlcih gesagt auch nich aufs Autoboxing verlassen :wink: und als Tipp für die Zukunft ist es sicher gut, das zu vermeiden. Aber bevor er das Programm (was vllt sehr komplex ist) umschreibt, erklär ich lieber wie mans in Eclipse umstellen kann und dass es so möglich ist.
@ARadauer: Genau das ist der Punkt, es ist wirklich schwirieger als man erwarten würde einen solchen Taschenrechner zu programmieren (habs letztens auch mal probiert, hat 3x so lange gedauert wie eingeplant^^ (An der GUI hats natürlich nich gelegen)). Ich schätze mal, dass er das ungefähr so plant (ich geh mal davon aus, dass die Zahlen auch als String gespeichert sind (würd ich so machen, wenn ich das alles in ein Array packen würd):
Code:
for(int i = 0; i < array.length; i++) {
if(array[i].equals("+")) {
ergebnis = String.valueOf(Double.parseDouble(array[i-1]) + Double.parseDouble(array[i+1]));
}
//usw...
}
//Werte ausm Array löschen (ne List wär wohl besser) und ergebnis einspeichern
Und das ist doch schon relativ praktisch so, find ich (bin jezz auch noch nich sooo ein alter Hase im Java-Programmieren :wink: )
Da wo dein Original-Code nicht funktioniert, ist wahrscheinlich ein uraltes Java (vor 1.5) installiert, und ich wollte deshalb vorschlagen, es mal upzudaten, sonst hast du dauernd solche Problemchen.
Wenn Java ordentlich installiert ist, reicht es, das hier in der DOS-Konsole zu tippen, um die aktive Version rauszubekommen:
java -version
@Landei: wie gesagt, ich hab ja das neuste Java, meine Schule ist nur leider nicht auf dem neusten Stand
Fu3L hat gesagt.:
@ARadauer: Er möchte ja wahrscheinlich einmal Zahlen und zum anderen die Rechenzeichen dareinspeichern, was man fürn Taschenrechner halt so braucht. (Ob das so sinnig ist, hab ich keine Lust drüber nachzudenken^^), deswegen muss er wohl beides dareinspeichern (man könnte natürlich die Zahlen auch als String speichern und dann Double.parseDouble(String s) aufrufen).
@Oli: Illuvatar hatte ja vom Autoboxing geschrieben, das wäre ja im Prinziep das was du vorschlägst und das schien ja auch zu klappen, mit einer vernünftig eingestellen Eclipse-Version...
ich hab vielleicht nen bisschen untertrieben mit kleiner rechner.
ich wollte nen rechner baun, das komplexe rechnungen ausführen kann und dabei objekte wie brüche, unechte brüche, wurzeln, exponenten, log, sin, cos, tan etc. einbauen und dazu noch das ergebnis als mathematisch korrekt ausgeben (also z.B. 2-Wurzel(3) statt irgent so ner kommazahl...
ich wollte nen rechner baun, das komplexe rechnungen ausführen kann und dabei objekte wie brüche, unechte brüche, wurzeln, exponenten, log, sin, cos, tan etc. einbauen und dazu noch das ergebnis als mathematisch korrekt ausgeben (also z.B. 2-Wurzel(3) statt irgent so ner kommazahl...
ist sicher eine große herausforderung, aber wenn mans durchzieht, kann man einiges dabei lernen... viel spaß damit, ich würd mir auf jeden fall mal das strategy pattern ansehen (brüche, unechte brüche, wurzeln, exponenten, log, sin, cos, tan etc.) ideal....