Datentypen Unklarheiten beim Rechnen

Status
Nicht offen für weitere Antworten.

carom

Mitglied
Hallo!

Versuche gerade nachzuvollziehen, wie ich in Java Rechenterme notieren muss, damit auch das rauskommt was ich will.

Aber mal von vorne. Es gelten doch folgende Regeln:

- Klammern werden zuerst ausgerechnet
- Operatoren können unterschiedliche Prioritäten haben, nach denen ausgewertet wird
- Ansonsten wird von links nach rechts gerechnet
- Der größte vorkommende Datentyp ist der Datentyp des Ergebnisses (Ausnahme: byte+byte und short+short ergeben int).

Hab ich was vergessen?
Aufjedenfall blick ich trotzdem nicht immer durch.

Beispiel:

Java:
int i = 3;
float result;
result = 1.0f/(i*i);

Das funktioniert prima - links ein float-literal, rechts zwei ints dank Klammer zu einem "verschmolzen". Und float mit int ergibt immer float.

Warum funktioniert folgendes nicht? (Funktionieren tuts schon, kommt aber ein int bzw. eine Ganzzahl raus)


Java:
int i = 3;
float result;
result = 1.0f/i*i;

Es ist das gleiche wie oben, nur fehlen jetzt die Klammern.
Mal und Geteilt haben die gleiche Priorität 12, es geht von links nach rechts. Er müsste demnach doch erst 1.0f/i rechnen -> float/int, es kommt float raus - und dieses Zwischenergebnis dann nochmal mit i multiplizieren, also float * int, das Ergebnis müsste wieder ein Float sein... es kommt aber eine Ganzzahl dabei raus.

Warum?

Danke schonmal!


//edit:

Achja, wenn wir gerade dabei sind:

Ist 1.0 äquivalent zu 1.0d, bzw. repräsentiert eine Zahl mit Punkt aber ohne Suffix immer ein Double-Wert?

Ich meine nur, weil

double i = 1.0;

funktioniert auch ohne das D-Suffix, bei

float k = 1.0;

meckert er aber wegen precision lost von double nach float.
 
Zuletzt bearbeitet:

javimka

Top Contributor
Es ist nicht dasselbe!
Im ersten Beispiel berechnest du 1/i^2 beim zweiten Beispiel berechnest du 1/i * i = i/i = 1. Weil du result als float deklariert hast, ist es auch ein float. Aber der Wert ist gerade 1, das hast du dann wohl als int interpretiert.
 

carom

Mitglied
Oh Gott, peinlich, danke.

Damit der Thread wenigstens noch etwas an Inhalt hat hab ich den ersten Post noch etwas erweitert und außerdem noch folgende Frage:

Wir haben gelernt: (Auszug)

"Die Anweisung return result; beendet die Methode und gibt den Wert von result an den Aufrufer zurück.
Der Typ von result muss zuweisungskompatibel mit dem Rückgabetyp der Methode sein".


Was heißt das zuweisungskompatibel jetzt genau? Im Unterricht hat sich das so angehört als könne result vom Typ double, float, int usw, sein, solange der Rückgabetyp im Methodenkopf als double gekennzeicnet ist, weil die eben alle zuweisungskompatibel sind bezüglich double.

Stimmt das? Oder muss result auch wirklich double sein wenn im Methodenkopf double angegeben ist?
Ich kann mich noch an die Worte des Lehrers erinnern: "...result darf von den Primitiven Typen alles sein, nur kein boolean und String...".
 

javimka

Top Contributor
es gibt einige Casts, die so gemacht werden können. float zo double und int zu long zum Beispiel. Ich weiss nicht, wie viel du schon über Klassen und Vererbung weisst, aber dort gilt das Prizip auch. Alle Klasse erben von Object, wenn der Rückgabewert also Object ist, kannst du auch einen String zurückgeben, weil das ein Object ist.
Und 1.0 ist tatsächlich äquivalent zu 1.0d.
 

hdi

Top Contributor
...result darf von den Primitiven Typen alles sein, nur kein boolean und String...
Das stimmt im Falle von double, bis auf String. String ist kein primitiver Datentyp! Ich hoffe ihr habt das nicht so gelernt...

Zuweisungskompatibel heisst:
• für primitive Datentypen: Es ist ein implizter Cast von dem Typ, dessen Wert du zurückgibst, zu dem Typ in der Signatur möglich. z.B lässt sich int nach double implizit casten:

Java:
public double foo(){
  int i = 2;
  return i;
}

Das ist in Ordnung, denn der Wertebereich von ganzen Zahlen ist im Wertebereich von Fließkommazahlen enthalten. Deshalb gehen auch alle anderen Dinge außer boolean, denn short byte long usw sind alles ganze Zahlen. Nur der Wertebereich ist unterschiedlich, aber die Typen sind implizit nach double "castbar".
Andersrum kannst du also zB ein double nicht implizit nach int casten, weil evtl Information (die Stellen hinter dem Komma) verloren gehen.

• für Objekte: Der Typ dessen Wert du zurückgibst liegt in der Polymorphie-Hierachie "unterhalb" des Typs (oder entspricht exakt dem Typ), der in der Methodensignaturen angegeben ist. zB:

Java:
public Object foo(){
  return new String("hi");
}
ist okay, denn String erbt von Objekt,und ist somit ein Objekt.
Das gilt nicht nur für Vererbung, sondern auch für Interface-Implementierungen:

Java:
public class MyClass implements ActionListener{
  ...
}

public ActionListener foo(){
   return new MyClass();
}

ist auch okay, denn MyClass implementiert das Interface ActionListener.
 
Zuletzt bearbeitet:
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Stack programmieren -> Unklarheiten Java Basics - Anfänger-Themen 1
G unklarheiten mit schlüsselwörtern Java Basics - Anfänger-Themen 14
Juelin jedit Fehler beim starten Java Basics - Anfänger-Themen 2
Kerstininer Vererbung Hilfe beim lernen von Objektorientierung für eine Klausur Java Basics - Anfänger-Themen 10
A Hilfe beim Lesen von Pfaden und Systemvariablen Java Basics - Anfänger-Themen 3
M Ausgabe beim Overloading Java Basics - Anfänger-Themen 3
W Null-Pointer Exception beim Programmstart Java Basics - Anfänger-Themen 8
H Nutzt Eclipse alle CPU-Threads beim Ausführen von Java-Programmen? Java Basics - Anfänger-Themen 4
M Nullpointer beim befüllen meiner Liste im Object Java Basics - Anfänger-Themen 3
J Beim Start des Programms zB. eine Linie in JPanel ausgeben Java Basics - Anfänger-Themen 4
I Projekte in IDE untereinander sharen / Probleme beim Build Java Basics - Anfänger-Themen 8
paulen1 Best Practice "Unchecked Assignment" Warnung beim erstellen eines 2D Arrays of Arraylists Java Basics - Anfänger-Themen 2
T Probleme beim Import eines Git-Repos Java Basics - Anfänger-Themen 2
C GLOOP Problem beim Erstellen der Kamera Java Basics - Anfänger-Themen 9
N Array beim erstellen mit Werten füllen Java Basics - Anfänger-Themen 6
T DamagedFontException beim drucken Java Basics - Anfänger-Themen 3
Z SNAKE Schlange beim Aufheben von Essen verlängern Java Basics - Anfänger-Themen 4
Bugs Bunny Fehlerhafte Berechnung beim erneuten Durchlaufen der Schleife Java Basics - Anfänger-Themen 5
stormyark Fehler beim überschreiben einer Variable Java Basics - Anfänger-Themen 1
T String Array Fehler beim Index Java Basics - Anfänger-Themen 3
Fiedelbambu Prüfen von Komma stelle beim Taschenrechner Java Basics - Anfänger-Themen 5
B Objekte verschwinden beim Übersetzen Java Basics - Anfänger-Themen 5
L Beim Java Programmstart, mehrere Parameter über die Kommandozeile übergeben Java Basics - Anfänger-Themen 9
sserio Problem beim Anzeigen Java Basics - Anfänger-Themen 5
X Hilfe beim Übertragen in eine For-Schleife Java Basics - Anfänger-Themen 1
S Fehler beim Programm Java Basics - Anfänger-Themen 2
G Main Methode wird beim ersten Aufruf nicht richtig ausgeführt Java Basics - Anfänger-Themen 1
M String beim einlesen formatieren Java Basics - Anfänger-Themen 12
N Exception beim Verwenden von Arraylist? Java Basics - Anfänger-Themen 10
I InputStream beim zweiten Mal fehlerhaft Java Basics - Anfänger-Themen 10
C Fehler beim erstellen eines Objektes Java Basics - Anfänger-Themen 3
C Brauche Hilfe beim Schreiben eines Programmes :/ Java Basics - Anfänger-Themen 1
cmn489 Werte beim Funktionsaufruf in ein Feld übertragen(falls dieses leer ist) Java Basics - Anfänger-Themen 1
I Output BigDecimal anstatt double / Problem beim Rechnen Java Basics - Anfänger-Themen 16
S Kriege Fehler "Exception in thread" beim Benutzen von SubStrings. Java Basics - Anfänger-Themen 2
D Hilfe beim Erzeugen eines Arrays NullPointerException wird ausgelöst Java Basics - Anfänger-Themen 11
Nerdinfekt BMI Rechner, fehler beim Zurückgeben des Strings? Java Basics - Anfänger-Themen 2
CptK Richtigen Pfad beim einlesen von Datei finden Java Basics - Anfänger-Themen 2
O Methode in while-Schleife aufrufen geht nur beim ersten Mal Java Basics - Anfänger-Themen 2
pry bitte Hilfe beim Kreditrechner objektorientiert Java Basics - Anfänger-Themen 6
J Hilfe beim Label animieren Java Basics - Anfänger-Themen 1
Avalon Programmierstil beim Mocken Java Basics - Anfänger-Themen 45
Avalon NullPointerException beim Mocken Java Basics - Anfänger-Themen 6
J Hilfe beim verstehen Java Basics - Anfänger-Themen 3
A Fehler beim Ausführen einer class Datei Java Basics - Anfänger-Themen 6
P Problem beim Überschreiben einer vererbten Methode Java Basics - Anfänger-Themen 4
M Compiler-Fehler Fehler beim Ausführen des Codes Java Basics - Anfänger-Themen 25
L Anfänger braucht Hilfe - Stecke beim Lernen fest Java Basics - Anfänger-Themen 10
N Probleme beim printen von Arrays durch for Schleife Java Basics - Anfänger-Themen 3
Bluedaishi Hilfe beim erklären dieser Methode Java Basics - Anfänger-Themen 5
E Macht Java Rechenfehler beim Potenzieren und Mod? Java Basics - Anfänger-Themen 5
J Hilfe beim Programmieren Java Basics - Anfänger-Themen 5
C Fehler beim Speichern (Build projekt) Java Basics - Anfänger-Themen 42
S Endlosschleife beim Ausgeben einer LinkedList Java Basics - Anfänger-Themen 2
tom.j85 TicTacToe - probleme beim Casten Java Basics - Anfänger-Themen 6
J Problem beim vergleich von zwei Integer Java Basics - Anfänger-Themen 3
Kirby.exe Fehler beim Ausgeben Java Basics - Anfänger-Themen 2
L Brauche Hilfe beim arbeiten mit Konstruktoren Java Basics - Anfänger-Themen 20
D Was tun gegen zu komplzierten Denken beim Programmieren Java Basics - Anfänger-Themen 27
G Problem beim Speichern von Objekten in einer Datei Java Basics - Anfänger-Themen 7
S Collections funktionale Listen (ListNode<E>) review und problem beim clone Java Basics - Anfänger-Themen 0
J NullPointerException beim Klonnen eines Arayys und beim aufrufen einer Methode Java Basics - Anfänger-Themen 2
J Fehler beim generieren von 4 Zufallszahlen Zahl doppelt ist eigentlich ausgeschlossen Java Basics - Anfänger-Themen 9
L Kleine Hilfe beim Schreiben eines Programmes benötigt :D Java Basics - Anfänger-Themen 40
T Fehlermeldung beim Versuch, einen String einzulesen Java Basics - Anfänger-Themen 4
V Wie wiederhole ich eine for-Schleife beim erreichen eines Wertes Java Basics - Anfänger-Themen 9
W Hilfe beim Chat Programm Java Basics - Anfänger-Themen 14
D Beim Programmieren auf die Logisch einfache Lösung kommen. Java Basics - Anfänger-Themen 17
S IndexOutOfBoundsException beim hinzufügen eines Elements zu einer Liste Java Basics - Anfänger-Themen 11
R String index out of range: -1 beim Datei Parsen Java Basics - Anfänger-Themen 15
I Methoden List.contains() beim 2. Element = true Java Basics - Anfänger-Themen 1
B EJB und Arquillian - bekomme Nullpointer Exception beim Aufruf der EJB Klasse Java Basics - Anfänger-Themen 40
O Verwirrt beim Java Collection Framework aufruf! Java Basics - Anfänger-Themen 9
S switch case fängt beim letzten case an Java Basics - Anfänger-Themen 6
S Erste Schritte Hilfe beim lernen von Programmieren Java Basics - Anfänger-Themen 2
der_Schokomuffin Hilfe gesucht beim Thema Objekte übergeben! Java Basics - Anfänger-Themen 2
A Pendeltouren beim Savings erfahren "schummeln" in Ordnung? Java Basics - Anfänger-Themen 1
dapzoo Compiler-Fehler Beim Werte verteilen in Objektarray NullPointerException Java Basics - Anfänger-Themen 4
C Methoden Problem beim Speichern von Variablen Java Basics - Anfänger-Themen 1
T Fehlermeldung beim Starten von FlashTool Java Basics - Anfänger-Themen 27
C Rekursives Backtracking beim Spiel Peg Java Basics - Anfänger-Themen 22
K Fehler beim Programmieren von TicTacToe Java Basics - Anfänger-Themen 12
J Hilfe beim Runden Java Basics - Anfänger-Themen 4
C Erste Schritte ArrayIndexOutOfBoundsException beim Speichern im Array Java Basics - Anfänger-Themen 2
F Problem beim entfernen von mehreren Listenelementen auf einmal (Programmierung des Spiels Arschloch) Java Basics - Anfänger-Themen 1
L Fehler beim laden eines Icons Java Basics - Anfänger-Themen 3
D Probleme beim Kompelieren mache ich etwas falsch ? Java Basics - Anfänger-Themen 3
R Methoden NPE beim Aufruf einer Methode einer anderen Klasse Java Basics - Anfänger-Themen 4
K Probleme beim Programm schreiben - Lesen von Dateiinhalten -zaehlen von Wörtern/ Buchstaben Java Basics - Anfänger-Themen 4
M Probleme beim aktualisieren eines JPanels Java Basics - Anfänger-Themen 7
J Probleme beim Array ausgeben Java Basics - Anfänger-Themen 4
CptK Bild beim betätigen eines JButtons Java Basics - Anfänger-Themen 6
D Könnt ihr mir helfen beim Programmieren eines Ping Pong Spieles? Java Basics - Anfänger-Themen 9
N Fehlermeldung beim ausführen des Programmes.. Java Basics - Anfänger-Themen 3
K Classpath RXTX beim Raspberry Java Basics - Anfänger-Themen 5
F (Eclipse) Beim importieren etwas fehlerhaft bitte um Hilfe :) Java Basics - Anfänger-Themen 3
B Datentypen Welcher Typ wird beim Casten übernommen? Java Basics - Anfänger-Themen 12
U Best Practice Fehleranalyse, welche Fehler macht Ihr beim Lernen bzw. auch später Java Basics - Anfänger-Themen 12
M Probleme beim verwenden von Packages Java Basics - Anfänger-Themen 6
G Methoden Probleme beim Methodenaufruf Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben