Wie würde man ein Datum speichern (z.B. 11. Oktober 2024)?
3 Variablen:
int day;
String month;
int year;
Unbequem, wenn man mehrere Exemplare braucht
int day1;
String month1;
int year1;
int day2;
String month2;
int year2;
...
Wir definieren uns eigenen Datentyp, der Variablen zusammenfasst.
Date mydate;
mydate.day = 13;
mydate.month = "November";
mydate.year = 2002;
Objekte einer Klasse müssen vor ihrer ersten Benutzung erzeugt werden.
Klassen sind Referenzdatentypen: Deklaration reserviert nur Speicher für die Referenzvariablen
Date mydate;
Erzeugung des Objekts und Referenz (Adresse) zuweisen
mydate = new Date();
Wir können beliebig viele Objekte einer Klasse erzeugen.
class Date {
int day;
String month;
int year;
}
Date d1 = new Date();
d1.day = 13;
d1.month = "Juli";
d1.year = 2019;
Date d2 = new Date();
d2.day = 11;
d2.month = "October";
d2.year = 2020;
static void printDate(Date d) {
System.out.println(d.day + ". " + d.month +" " +d.year);
};
printDate(d1);
13. Juli 2019
Nur gleiche Typen dürfen zugewiesen werden:
class Address {
int personId;
String streetname;
int number;
}
Date d1 = new Date();
Address a1 = new Address();
// Folgendes funktioniert nicht
a1 = d1;
| a1 = d1; incompatible types: Date cannot be converted to Address
Deklaration auf äusserster Ebene eines Programms (einer Datei)
class C1 {
...
}
class C2 {
...
}
class MainProgram {
public static void main(String[] args) {
...
}
}
Polygon
class Point {
int x;
int y;
}
class Polygon { Point[] points; }
// Definiere Polygon hier
Polygon poly = new Polygon();
poly.points = new Point[4];
Point p1 = new Point();
p1.x = 10;
p1.y = 20;
poly.points[0] = p1;
Point p2 = new Point();
p2.x = 20;
p2.y = 40;
poly.points[1] = p2;
/// ...
REPL.$JShell$31$Point@75d924ee
Rectangle
, welche ein Rechteck repräsentiertintersection
, welche zwei Rechtecke als Argumente nimmt und das Schnittrechteck zurückgibt.Time
, welche die Zeit in Stunden, Minuten und Sekunden repräsentiertconvert
welche eine Anzahl Sekunden s
vom Typ int
entgegennimmt und diese in Stunden, Minuten und Sekunden umwandelt. Das Resultat soll dem Aufrufer zurückgegeben werden.class Rectangle {
int x; // x - lower left
int y; // y - lower left
int width; // x - upper right
int height; // y - upper right
}
static Rectangle intersection(Rectangle r1, Rectangle r2) {
Rectangle r = new Rectangle();
r.x = Math.max(r1.x, r2.x);
r.y = Math.max(r1.y, r2.y);
int right = Math.min(r1.x + r1.width, r2.x + r2.width);
int bottom = Math.min(r1.y + r1.height, r2.y + r2.height);
if (right > r.x && bottom > r.y) {
r.width = right - r.x;
r.height = bottom - r.y;
return r;
} else {
return null;
}
}
Rectangle r1 = new Rectangle();
r1.x = 10;
r1.y = 20;
r1.width = 10;
r1.height = 5;
Rectangle r2 = new Rectangle();
r2.x = 15;
r2.y = 15;
r2.width = 20;
r2.height = 10;
Rectangle rIntersect = intersection(r1, r2);
System.out.println("lower left corner = (" +rIntersect.x + "," + rIntersect.y + ") "
+"width = " +rIntersect.width + " height = " +rIntersect.height);
lower left corner = (15,20) width = 5 height = 5
class Time {
int seconds;
int minutes;
int hours;
}
static Time convert(int sec) {
Time t = new Time();
t.hours = sec / 3600;
t.minutes = (sec % 3600) / 60;
t.seconds = sec % 60;
return t;
}
Time convertedTime = convert(3661);
System.out.println(convertedTime.hours +":" + convertedTime.minutes + ":" +convertedTime.seconds);
1:1:1