In diesem Notebook schauen wir uns vier grundlegende Datentypen von Java an. Sie lernen:
Entscheidungskriterien
int
. Verwenden Sie long
wenn der Wertebereich von int
nicht gross genug ist.double
. Verwenden Siefloat
wenn der Speicher zu begrenzt ist.byte
und short
, welche ganze Zahlen nur in einem kleineren Bereich als int
darstellen können.)Um einen Zahlwert als long
zu kennzeichnen, folgt nach der ganzen Zahl der Buchstabe l
(kleines L
).
1l
9876543210l
Um einen Zahlenwert als float
zu kennzeichnen, folgt nach dem Zahlwert der Buchstabe f
.
1f
-2.345f
3.1415e-3f
long
und float
.float
einer Variable vom Typ double
zu.long
einer Variable vom Typ int
zu.public class Values {
public static void main(String[] args) {
// Ihre Lösung kommt hier hin
}
}
Values.main(new String[0]);
Auf den Wertebereiche der Datentypen bezogen gilt: $$ int \subset long \subset float \subset double$$
In Java ist die Zuweisung eines Wertes an eine Variable des gleichen oder mächtigeren Datentyps erlaubt.
Konstanten welche den Wertebereich angeben sind:
Typ | Konstante | Bedeutung |
---|---|---|
int | Integer.MAX_VALUE | grösster, darstellbarer Wert |
int | Integer.MIN_VALUE | kleinster, darstellbarer Wert |
long | Long.MAX_VALUE | grösster, darstellbarer Wert |
long | Integer.MIN_VALUE | kleinster, darstellbarer Wert |
float | Float.MAX_VALUE | grösster, darstellbarer Wert |
float | Float.MIN_VALUE | kleinster, positiver, darstellbarer Wert |
double | Double.MAX_VALUE | grösster, darstellbarer Wert |
double | Double.MIN_VALUE | kleinster, positiver, darstellbarer Wert |
public class Range {
public static void main(String[] args) {
System.out.println("int stellt Zahlen von " +
Integer.MIN_VALUE + " bis " +
Integer.MAX_VALUE + " dar.");
System.out.println("Dies ist in etwa +- 2 Milliarden.");
System.out.println("long stellt Zahlen von " +
Long.MIN_VALUE + " bis " +
Long.MAX_VALUE + " dar.");
System.out.println("Dies ist in etwa +- 9 Trillionen.");
System.out.println("float stellt Zahlen von " +
(-Float.MAX_VALUE) + " bis " +
Float.MAX_VALUE + " dar.");
System.out.println("double stellt Zahlen von " +
(-Double.MAX_VALUE) + " bis " +
Double.MAX_VALUE + " dar.");
System.out.println(Float.MIN_VALUE + " ist nur etwas grösser als 0.0f.");
System.out.println(Double.MIN_VALUE + " ist nur etwas grösser als 0.0.");
}
}
Range.main(new String[0]);
Welchen der vier Typen würden Sie bei den folgenden Aufgabenstellungen verwenden?
Die Konstanten welche den Speicherbedarf angeben sind:
Typ | Konstante |
---|---|
int | Integer.SIZE |
long | Long.SIZE |
float | Float.SIZE |
double | Double.SIZE |
public class MemoryFootprint {
public static void main(String[] args) {
System.out.println("int belegt " + Integer.SIZE + " Bits im Speicher.");
System.out.println("long belegt " + Long.SIZE + " Bits im Speicher.");
System.out.println("float belegt " + Float.SIZE + " Bits im Speicher.");
System.out.println("double belegt " + Double.SIZE + " Bits im Speicher.");
}
}
MemoryFootprint.main(new String[0]);
Variablen die ihren Wert nicht ändern sollen können mit dem Schlüsselwort final
gekennzeichnet werden.
Beispiele:
Namenskonvention: ALL_CAPITAL_LETTERS
public class ConstantValues {
public static void main(String[] args) {
final int MAX_LENGTH = 12;
System.out.println(MAX_LENGTH + " und " + Math.PI + " sind Werte von Konstanten.");
}
}
ConstantValues.main(new String[0]);
Berechnen Sie die Lösung für die folgende Aufgabe und geben Sie die Zahl aus.
public class GardenFence {
public static void main(String[] args) {
// Ihre Lösung kommt hier hin
}
}
GardenFence.main(new String[0]);
Schema
(<TYPE>) <AUSDRUCK>
Beispiele
(int) 2.0
(float) 3.1415
(long) (5.6 * 2.1)
int
berechnet und dann ausgegeben wird.public class TypeCasts {
public static void main(String[] args) {
// Ihre Lösung kommt hier hin
}
}
TypeCasts.main(new String[0]);
Die Genauigkeit von Zahlen im Computer ist Beschränkt. Nicht nur beim Type-Casting können so Fehler entstehen. Wir schauen uns nun drei Rechnungen an wo nur die Addition verwendet wird. Werden wir die erwarteten Resultate erhalten.
Addieren Sie dreimal die Zahl 0.1 zueinander und geben das Resultat auf die Konsole aus.
public class Summation {
public static void main(String[] args) {
// Ihre Lösung kommt hier hin
}
}
Summation.main(new String[0]);
Mathematisch gibt die folgende Formel für positive, ganze Zahlen immer 1: $$\sum\limits_{i=1}^{N}\frac{1}{N}$$
public class Summation2{
public static void main(String[] args) {
double result = 1.0 / 6.0 + 1.0 / 6.0 + 1.0 / 6.0 +
1.0 / 6.0 + 1.0 / 6.0 + 1.0 / 6.0;
System.out.println("Erwartet 1.0, tatsächlich " + result);
}
}
Summation2.main(new String[0]);
public class Summation3 {
public static void main(String[] args) {
double a = 13.0;
double b = Math.PI;
double c = 21.45;
double solution_student = a + b + c;
System.out.println("The solution of the student is: " + solution_student);
double solution_teacher = a + c + b;
System.out.println("The solution of the teacher is: " + solution_teacher);
}
}
Summation3.main(new String[0]);
Diese Beispiele zeigen, dass man bei Gleitkommazahlen immer aufpassen muss mit der Genauigkeit.
Dies wird später im Kurs vorallem auch beim Testen von Programmen erneut wichtig.
float
werden mit 32 Bits dargestellt. Mit 32 Bits lassen sich $2^{32}$ unterschiedliche Werte darstellen.float
eine Genauigkeit von 6 oder 7 signifikanten Dezimalstellen, für double
sind es 14 bis 15 signifikante Dezimalstellen.Interessierte finden eine ausführlichere und detailliertere Diskussion rund um die Darstellung und Genauigkeit von float
hier.
int
, long
, float
, double