Jetzt reicht es ! Java rechnet nicht richtig.

@_ebm_: Das hat nichts mit Definitions- oder Wertebereichen zu tun, sondern damit, dass du unter dem Begriff "Division" zwei verschiedene Abbildungen/Verknüpfungen verstehst. Unter der Division verstehe ich die Abbildung f: (Q,Q\{0}) -> Q mit (a,b) -> a*b^(-1), wobei * die übliche Multiplikation auf Q ist und b^(-1) das Inverse Element von b. Diese Definition macht natürlich keinen Sinn, wenn sie Beispielsweise auf einen Ring (wie Z) übertragen wird, in dem nicht jedes Element ein Inverses besitzt.
Die Division ist nicht mit der Division mit Rest zu verwechseln, die mathematisch etwas ganz anderes ist. Daher kommt auch die Verwirrung vom Threadersteller, die man aber problemlos beseitigen könnte, indem man wie Darii vorschlug "/" generell für die Division verwendet (unabhängig vom Zahlentyp) und die Division mit Rest durch einen anderes Zeichen kodiert. Diese Mischlösung, wenn nur Integer übergeben werden, bedeutet "/" Division mit Rest und sonst Division, ist nicht sehr schlau gewählt.
 
Danke für die Konkretisierung ;)
 
Punkt bei der Nummer ist doch, dass es ist, wie es ist. Programmieren ist nun einmal etwas, bei dem man gerne mal in gewisse "Fallen" rein rennt. Wie bei jeder moderat komplizierten anderen Tätigkeit auch, ist es schlichtweg wichtig, dass man weiss, was man tut.
Sich an eine Programmieraufgabe zu setzen, ohne die Basics zu kennen - und genau das ist die Behandlung und Typisierung von Variablen - ist eine Sache, dann aber "Jetzt reicht es !" als Threadtitel zu wählen, demonstriert schon ein profundes Maß an... nennen wir es Arroganz.

Ich finde es nicht verwerflich, dass man sich mit Programmierung und den Eigenheiten bestimmter Programmiersprachen nicht auskennt. (Himmel! Selbst gestandenen Informatikern passiert so was.) Allerdings wäre es angebrachter, herauszufinden, was nicht klappt und lernbereit zu sein. Jammern mag einem eine gewisse Erleichterung verschaffen - aber zielführend ist das nicht.

Wer mit JAVA (oder jeder anderen Programmiersprache) arbeitet, muss sich damit auseinander setzen, Hilfe finden und LERNEN. "Jetzt reicht es !" bezeugt nur die eigene Selbstüberschätzung.

(Sry, ich habe zu oft mit Leuten zu tun, die noch extremer glauben, sie hätten RECHT.)
 
Das Problem ist doch, dass man _meistens_ nicht weiß, ob man 50/100 rechnet. Und mir ist dann lieber ich bekomme etwas, was ich so erwarten kann. Ich bin auf jeden Fall _für_ typensicheres programmieren. Und wenn ich zwei Integer dividiere/multipliziere/addiere/... dann möchte ich gefälligst auch einen Integer bekommen. Außer ich gebe das explizit anders an.
 
  • Gefällt mir
Reaktionen: PeTerminator und Lazarus
Ich bin auf jeden Fall _für_ typensicheres programmieren. Und wenn ich zwei Integer dividiere/multipliziere/addiere/... dann möchte ich gefälligst auch einen Integer bekommen.
Hat mit Typsicherheit aber auch mal gar nichts zu tun, wenn du zwei doubles miteinander vergleichst kommt auch ein Boolean raus und kein double. Das ist einfach die Definition des Operators. Was ist mit Kreuzprodukt und dem Skalarprodukt? Das eine Mal kommt ein Vektor raus, das andere Mal ein Skalar. Da beschwert sich auch keiner über Typsicherheit.

Und falls du jetzt auf mein Smalltalk-Beispiel anspielst: Fraction und Integer sind beides Subklassen von Number, also alles sicher. Geht halt nur im Parade-OOP-Java nicht, da Zahlen keine Objekte sind.

Und in Java bestimmst du die Ausgabe eben nicht über den Operator, sondern über die Eingabe. Meine Güte, so ist es eben. Für mich praktisch, da kann jeder denken was er will. Ändert es ja letztlich eh nicht.
Natürlich bestimmt der Operator die Ausgabe, 2*4 ist eben was anderes als 2-4. Und (float)4 ist etwas anderes als (int)4.

Ich wollte eigentlich nur sagen, dass die Definition des "/" nicht unbedingt logisch gewählt ist. Das sieht man nicht vom naiv draufgucken was da rauskommt, das muss man wissen. Aus der Schule würde man erwarten, dass 1/2 eben 1/2 oder 0.5 ergibt.
 
Zuletzt bearbeitet:
Aus der Schule würde man erwarten, dass 1/2 eben 1/2 oder 0.5 ergibt.

Und genau deshalb muss man LERNEN, wie das mit dem Programmieren und den Eigenwilligkeiten der jeweiligen Sprachen so ist.

Es gibt sogar gute Gründe für überladene Operatoren bzw. Typkonsistenz, nur dass man das halt nicht einfach so in der Schule lernt. Ich habe in Physik auch gelernt, wie das mit 'nem Stromkreis so funktioniert und habe mein Haus trotzdem von einem Elektriker verkabeln lassen... Computer und speziell Programmierung ist nun einfach mal nichts, was man "so" kann, da muss man schon ein wenig Zeit investieren und nicht drüber jammern.
 
Und genau deshalb muss man LERNEN, wie das mit dem Programmieren und den Eigenwilligkeiten der jeweiligen Sprachen so ist.
Warum passt man den Computer nicht dem Menschen an sondern versucht durch "Elitewissen" auf Biegen und Brechen weitere Einwanderungen auf die "Insel der Erleuchtung" zu verhindern?
 
Natürlich bestimmt der Operator die Ausgabe, 2*4 ist eben was anderes als 2-4. Und (float)4 ist etwas anderes als (int)4.
War hier nur auf den Divisionsoperator bezogen.

Warum passt man den Computer nicht dem Menschen an sondern versucht durch "Elitewissen" auf Biegen und Brechen weitere Einwanderungen auf die "Insel der Erleuchtung" zu verhindern?
Naja, ob ich mich in Java nun wundere, weshalb 5/2 = 2, oder ob ich in Python nicht verstehe, weshalb Bildschirmbreite/2 mir einen Kommawert liefert, ist doch nicht so wichtig. ;) So oder so, man muss was lernen.
 
oder ob ich in Python nicht verstehe, weshalb Bildschirmbreite/2 mir einen Kommawert liefert,
Das ist krisensicher ;) wer weiß wann Apple das erste Display mit 2563 x 1821 bringt :hehehe:
Aber 5 / 2 ist auf keinen Planeten dieser Galaxie = 2
 
Solange man mehr als einen Fließkomma-Datentyp hat (z.B. float und double), kann man die Division von zwei Integerzahlen nicht sinnvoll als Nicht-Integer-Division definieren, da man nicht weiß, ob ein float oder ein double herauskommen soll.

Fast jede Division ist ungenau, denn 1.0 / 3.0 ist auch als Fließkomma-Division nicht genau ein Drittel, sondern nur ungefähr, weil man ein Drittel nicht genau als Fließkommazahl darstellen kann.

Was zeigt uns das? Währungsbeträge als Fließkommazahl darzustellen, ist keine gute Idee, der Threadersteller sollte lieber in Cent arbeiten und die Ausgabe nachher anpassen (wie "man" das sowieso üblicherweise macht). Und dabei gleich aufpassen, daß die Integers groß genug sind, damit er keinen Überlauf bekommt bei großen Beträgen.

Das hat nichts mit Elitewissen zu tun, sondern damit, ob man versteht, was man tut, oder nicht.
 
Das hat nichts mit Elitewissen zu tun, sondern damit, ob man versteht, was man tut, oder nicht.

Genau das ist Elitewissen. Warum nicht also Java so designen, dass es jeder versteht? Oder ist dann wieder der "Elitestatus" in Gefahr wenn es jeder kann?

Dieser Egoismus oder auch das beliebte "ich weiß was was Du nicht weiß" Spielchen ist das Hauptproblem unserer Gesellschaft.

Bestes Beispiel: Dieses Forum oder besser das "Entwickler" Unterforum - bei konkreten Fragen, warum etwas nicht funktioniert, bekommt man als Antwort meist Hinweise auf bibeldicke Fachliteratur mit dem Hinweis, dass man ohne dieses Wissen eh keine Chance hat und auch deshalb keine Hilfe erwarten kann
 
Genau das ist Elitewissen. Warum nicht also Java so designen, dass es jeder versteht? Oder ist dann wieder der "Elitestatus" in Gefahr wenn es jeder kann?

Dieser Egoismus oder auch das beliebte "ich weiß was was Du nicht weiß" Spielchen ist das Hauptproblem unserer Gesellschaft

So ein Käse. Es versteht ja jeder, wenn er drüber nachdenkt. Oder einfach in die Spezifikation guckt. Oder sich zum ersten Mal über den Fehler geärgert hat.

Übrigens möchte ich die Programmiersprache sehen, die so gemacht ist, daß *jeder* darin programmieren kann.

Ob Du es glaubst oder nicht, es gibt Sachen, die muß man *lernen*, und da sind Integer-Divisionen noch das kleinste Problem.

P.S.: Zeig mir mal, wie Du reelle Zahlen beliebiger Genauigkeit mit endlichem Speicherplatz binär darstellen willst.
 
Die Welt ist leider nicht so einfach, wie manche es gerne hätten. Programmiersprachen sind nun mal die Werkzeuge, mit denen man die Computer an den Menschen anpasst. Und die sind schon ein gutes Stück weiter gekommen - wenn ich an das gute alte c zurückdenke mit Speicheralloziezung und einigen anderen echten Schmerzen, ist Java ein Musterbeispiel für Benutzerfreundlichkeit.
Das hat wenig bis gar nichts von naivem Elitebashing zu tun, sondern damit, dass nach momentanen Stand der Dinge eine weitere Vereinfachung schlichweg nicht möglich ist.
Ich verwahre mich auch sehr gegen diesen plumpen Vorwurf, der da nicht nur unterschwellig mitschwingt. Nicht nur, gibt es hier (und anderswo) auf höfliche Fragen ausführliche Antworten, es ist auch so, dass es nun mal so ist, dass für komplexe Aufgaben ein gewisses Wissen, Fleiss und auch Arbeit zur Lösung nötig sind. Es spricht mehr als nur Arroganz aus der Aussage "ich will, dass es so geht und weil es nicht songeht, ich ich glaube sind alle anderen doof".
Wer das Handwerk eines Programmierers erlernen will, muss eben auch die Werkzeuge beherrschen lernen. Das ist mit jeder halbwegs qualifizierten Tätigkeit so. Darum gibt es Schulen, Berufsschulen, Fachhochschulen und Universitäten. Weil es eben nicht einfach ist. Warum glaubt nur jeder, dass gerade die komplizierteste Technik, die wir bisher entwickelt haben - also elektronische Rechenmaschinen - da eine Ausnahme bilden?
 
Das ist krisensicher ;) wer weiß wann Apple das erste Display mit 2563 x 1821 bringt :hehehe:
Na eben nicht! Gerade bei so einem Display will ich doch einen Integer. Oder glaubst du, eine Funktion zum Zeichnen eines bestimmten Pixels frisst mir den Pixel an der Stelle x = 1281,5? ;D
Bestes Beispiel: Dieses Forum oder besser das "Entwickler" Unterforum - bei konkreten Fragen, warum etwas nicht funktioniert, bekommt man als Antwort meist Hinweise auf bibeldicke Fachliteratur mit dem Hinweis, dass man ohne dieses Wissen eh keine Chance hat und auch deshalb keine Hilfe erwarten kann
Dem muss ich aber mal glatt zustimmen...
 
In der Schule haben wir das zuerst auch so gelernt, dass zum Beispiel 3 geteilt durch 5 gleich 0 Rest 3 ist. Und genauso verhält sich die die Ganzzahl-Division bei den Programmiersprachen.
 
Na eben nicht! Gerade bei so einem Display will ich doch einen Integer. Oder glaubst du, eine Funktion zum Zeichnen eines bestimmten Pixels frisst mir den Pixel an der Stelle x = 1281,5? ;D
Das sind die noch unbekannten Quark-Pixel - die werden noch im CERN erforscht :hehehe:
 
Jaja, ich adressier jeden Subpixel einzeln, alle anderen sind doch Weicheier. :D
 
Zurück
Oben Unten