Übungen¶
Übungsblätter (wochenweise)¶
Übung 0
- Installieren Sie sich - falls noch nicht geschehen - eine Java-Entwicklungsumgebung (siehe Java).
- Installieren Sie sich die IDE Ihrer Wahl (siehe IDE). In den Vorlesungen und Übungen (Videos) verwende ich Eclipse und beschreibe die Schritte auch für Eclipse.
- Starten Sie Eclipse durch Doppelklick auf das Programmsymbol.
- Erstellen Sie einen Workspace (Arbeitsbereich) in einem gewünschten Ordner (z. B. Programmieren) im Dateisystem. Achten Sie darauf, dass Sie Schreibrechte in diesem Ordner besitzen.
- Anlegen eines Projektordners:
- Auswahl im Menü
File-->New-->Java Project
. - Eingabe des
Project name:
Name des Projektes (z.B. WiSe20). Wenn Sie gefragt werden, ob Sie einmodule-info.java
erstellen wollen, wählen SieDon't create
. - Klicken auf den Button
Finish
.
- Auswahl im Menü
- Erstellen eines neuen Packages (Paketes):
- Öffnen der Projektmappe im
Package Explorer
. - Auswahl des Ordners
src
mit der rechten Maustaste. - Auswahl des Menüpunktes
New --> Package
. - Geben Sie folgenden Paketnamen ein (Paketnamen werden kleingeschrieben)
uebungen.uebung0
(Achten Sie auf den Punkt und dass Sie alles zusammen schreiben).
- Öffnen der Projektmappe im
- Erstellen einer neuen Klasse:
- Öffnen der Projektmappe im Package Explorer.
- Auswahl des Paketes (
uebungen.uebung0
) mit der rechten Maustaste. - Auswahl des Menüpunktes
New --> Class
. - Eingabe des Namens, der gleichzeitig der Klassen- und Dateiname ist:
Uebung0
. Klassennamen werden immer groß geschrieben. - Setzen des Häkchens bei
public static void main()
. (Sollten Sie vergessen haben, das Häkchen zu setzen, dann ist die Klasse, nachdem SieFinish
gedrückt haben, leer. Setzen Sie dann den Cursor zwischen die beiden geschweiften Klammern{ }
, geben dannmain
ein und drücken die Ctrl+Leer-Tasten und anschließend Enter. Dann erscheint diemain()
-Methode) - Klicken auf den Button
Finish
.
- In die
main()
-Methode (zwischen die geschweiften Klammern{
und}
geben Sie ein:System.out.println("Uebung 0"));
. - Drücken Sie dann entweder auf den
-Button oder wählen Sie aus dem Menü
Run --> Run
oder drücken Sie shift+command+f11. In derConsole
in Ihrer IDE (in Eclipse unten) erscheintUebung 0
.
package uebungen.uebung0;
public class Uebung0
{
public static void main(String[] args)
{
System.out.println("Uebung 0");
}
}
Success
Fertig! Ihre Entwicklungsumgebung ist bereit! Wir können loslegen.
Übung 1
- Erstellen Sie ein package
uebungen.uebung1
. - Erstellen Sie in diesem package eine Klasse
Uebung1
mitmain()
-Methode. - Deklarieren und initialisieren Sie in der
main()
-Methode jeweils eine Variable mit dem Datentypint
,long
,char
,byte
,short
,float
,double
,boolean
undString
. Geben Sie alle Werte einzeln durch Aufruf derprintln()
-Methode aus. Erzeugen Sie dabei folgende Ausgabe (Werte nur Beispiele):Wert vom Typ int : 123 Wert vom Typ long : 456789 Wert vom Typ char : a Wert vom Typ byte : 127 Wert vom Typ short : 32767 Wert vom Typ float : 4.23 Wert vom Typ double : 6.98 Wert vom Typ boolean : true Wert vom Typ String : Hallo!
- Setzen Sie den Wert Ihrer
int
-Variablen auf2147483647
. Geben Sie den Wert auf der Konsole aus, z.B.:
Erhöhen Sie nun den Wert der Variablen umWert von i : 2147483647
1
und geben Sie den Wert erneut aus. Was passiert? Warum? - Wiederholen Sie das gleiche mit einer `long-Variablen.
- Weisen Sie Ihrer
char
-Variablen den Wert65
zu. Geben Sie den Wert Ihrerchar
-Variablen aus. Was passiert? Warum? - Schreiben Sie eine Methode
Diese Methode soll folgende Ausgabe auf die Konsole erzeugen, z.B. für
public static void printIntDivision(int nr1, int nr2) { }
printIntDivision(7, 4);
die Ausgabez.B. für7 geteilt durch 4 ergibt 1. Es bleibt ein Rest von 3
printIntDivision(17, 4);
die AusgabeSchreiben/ändern Sie die Methode so, dass bei einer ganzzahligen Division ohne Rest die Ausgabe in der Form ist (Aufruf z.B.17 geteilt durch 4 ergibt 4. Es bleibt ein Rest von 1
printIntDivision(16, 4);
):16 geteilt durch 4 ergibt 4 ohne Rest.
- Schreiben Sie zwei Methoden
Deklarieren Sie in der main()-Methode zwei int-Variablen und weisen Sie diesen Werte zu (z.B.
public static int getQuotient(int nr1, int nr2) {} // und public static int getRemainder(int nr1, int nr2) {}
17
und4
). Wenden Sie die beiden Methoden so an, dass mit Hilfe derprintln()
-Methode folgende Ausgaben erscheinen:17/4 = 4 17 mod 4 = 1
Eine mögliche Lösung für Übung1
package uebungen.uebung1;
public class Uebung1
{
public static void printIntDivision(int nr1, int nr2)
{
int quotient = nr1 / nr2;
int rest = nr1 % nr2;
if(rest==0)
{
System.out.println(nr1 + " geteilt durch " + nr2 + " ergibt " + quotient + " ohne Rest.");
}
else
{
System.out.println(nr1 + " geteilt durch " + nr2 + " ergibt " + quotient
+ ". Es bleibt ein Rest von " + rest);
}
}
public static int getQuotient(int nr1, int nr2)
{
int quotient = nr1 / nr2;
return quotient;
}
public static int getRemainder(int nr1, int nr2)
{
int remainder = nr1 % nr2;
return remainder;
}
public static void main(String[] args)
{
int in = 123;
long lo = 456789;
char ch = 'a';
byte by = 127;
short sh = 32767;
float fl = 4.23f;
double d1 = 6.98;
boolean b1 = true;
String s1 = "Hallo!";
System.out.println(" --- Aufgabe 3 -------");
System.out.println();
System.out.println("Wert vom Typ int : " + in );
System.out.println("Wert vom Typ long : " + lo );
System.out.println("Wert vom Typ char : " + ch );
System.out.println("Wert vom Typ byte : " + by );
System.out.println("Wert vom Typ short : " + sh );
System.out.println("Wert vom Typ float : " + fl );
System.out.println("Wert vom Typ double : " + d1 );
System.out.println("Wert vom Typ boolean : " + b1 );
System.out.println("Wert vom Typ String : " + s1 );
System.out.println();
System.out.println(" --- Aufgabe 4 -------");
System.out.println();
in = 2147483647;
System.out.println("Wert vom Typ int : " + in );
in = in + 1; // in++;
System.out.println("Wert vom Typ int : " + in );
System.out.println();
System.out.println(" --- Aufgabe 5 -------");
System.out.println();
lo = 2147483647L;
System.out.println("Wert vom Typ long : " + lo );
lo = lo +1 ;
System.out.println("Wert vom Typ long : " + lo );
System.out.println();
System.out.println(" --- Aufgabe 6 -------");
System.out.println();
ch = 65;
System.out.println("Wert vom Typ char : " + ch );
System.out.println();
System.out.println(" --- Aufgabe 7 -------");
System.out.println();
printIntDivision(7, 4);
printIntDivision(17, 4);
printIntDivision(16, 4);
System.out.println();
System.out.println(" --- Aufgabe 7 -------");
System.out.println();
int number1 = 17;
int number2 = 4;
int result = getQuotient(number1, number2);
System.out.println(number1 + "/" + number2 + " = " + result);
int rest = getRemainder(number1, number2);
System.out.println(number1 + " mod " + number2 + " = " + rest);
}
}
Video zu Übung 1
Übung 2
- Erstellen Sie ein package
uebungen.uebung2
. - Erstellen Sie in diesem package eine Klasse
Uebung2
mitmain()
-Methode. -
Schreiben Sie eine Methode
public static void printTimesTables(int nr1, int nr2)
. Bei Aufruf der Methode z.B. fürprintTimesTables(10,10);
soll das kleine Ein-Mal-Eins in der folgenden Form ausgegeben werden:Ausgabe für printTimesTables(10,10);
1 * 1 = 1 1 * 2 = 2 1 * 3 = 3 1 * 4 = 4 1 * 5 = 5 1 * 6 = 6 1 * 7 = 7 1 * 8 = 8 1 * 9 = 9 1 * 10 = 10 2 * 1 = 2 2 * 2 = 4 2 * 3 = 6 2 * 4 = 8 2 * 5 = 10 2 * 6 = 12 2 * 7 = 14 2 * 8 = 16 2 * 9 = 18 2 * 10 = 20 3 * 1 = 3 3 * 2 = 6 3 * 3 = 9 3 * 4 = 12 3 * 5 = 15 3 * 6 = 18 3 * 7 = 21 3 * 8 = 24 3 * 9 = 27 3 * 10 = 30 4 * 1 = 4 4 * 2 = 8 4 * 3 = 12 4 * 4 = 16 4 * 5 = 20 4 * 6 = 24 4 * 7 = 28 4 * 8 = 32 4 * 9 = 36 4 * 10 = 40 5 * 1 = 5 5 * 2 = 10 5 * 3 = 15 5 * 4 = 20 5 * 5 = 25 5 * 6 = 30 5 * 7 = 35 5 * 8 = 40 5 * 9 = 45 5 * 10 = 50 6 * 1 = 6 6 * 2 = 12 6 * 3 = 18 6 * 4 = 24 6 * 5 = 30 6 * 6 = 36 6 * 7 = 42 6 * 8 = 48 6 * 9 = 54 6 * 10 = 60 7 * 1 = 7 7 * 2 = 14 7 * 3 = 21 7 * 4 = 28 7 * 5 = 35 7 * 6 = 42 7 * 7 = 49 7 * 8 = 56 7 * 9 = 63 7 * 10 = 70 8 * 1 = 8 8 * 2 = 16 8 * 3 = 24 8 * 4 = 32 8 * 5 = 40 8 * 6 = 48 8 * 7 = 56 8 * 8 = 64 8 * 9 = 72 8 * 10 = 80 9 * 1 = 9 9 * 2 = 18 9 * 3 = 27 9 * 4 = 36 9 * 5 = 45 9 * 6 = 54 9 * 7 = 63 9 * 8 = 72 9 * 9 = 81 9 * 10 = 90 10 * 1 = 10 10 * 2 = 20 10 * 3 = 30 10 * 4 = 40 10 * 5 = 50 10 * 6 = 60 10 * 7 = 70 10 * 8 = 80 10 * 9 = 90 10 * 10 = 100
-
Schreiben Sie eine Methode
public static void printTimesMatrix(int nr1, int nr2)
. Bei Aufruf der Methode z.B. für printTimesMatrix(10,10) soll das kleine Ein-Mal-Eins in der folgenden Form ausgegeben werden:Ausgabe für printTimesMatrix(10,10);
1 2 3 4 5 6 7 8 9 10 2 4 6 8 10 12 14 16 18 20 3 6 9 12 15 18 21 24 27 30 4 8 12 16 20 24 28 32 36 40 5 10 15 20 25 30 35 40 45 50 6 12 18 24 30 36 42 48 54 60 7 14 21 28 35 42 49 56 63 70 8 16 24 32 40 48 56 64 72 80 9 18 27 36 45 54 63 72 81 90 10 20 30 40 50 60 70 80 90 100
-
Schreiben Sie eine Methode
public static void printTriangleUp(int height)
. Bei Aufruf der Methode z.B. fürprintTriangleUp(7)
soll folgende Ausgabe erscheinen:******* ****** ***** **** *** ** *
-
Geben Sie alle möglichen Kombinationen für 3 ganze Zahlen
x
,y
undz
aus, für die gilt:x <= y <= z und x * y * z = 36
- Schreiben Sie eine Umrechnung für eine gegebene Anzahl von Sekunden (
printSeconds(int seconds)
), z.B.printSeconds(3456789)
:Aber z.B.3456789 Sekunden sind 40 Tage, 13 Minuten, 9 Sekunden.
printSeconds(2345678)
:Aber z.B.2345678 Sekunden sind 27 Tage, 3 Stunden, 34 Minuten, 38 Sekunden.
printSeconds(123456)
:Aber z.B.123456 Sekunden sind 1 Tag, 10 Stunden, 17 Minuten, 36 Sekunden.
printSeconds(12345)
:12345 Sekunden sind 3 Stunden, 25 Minuten, 45 Sekunden.
- Schreiben Sie eine Methode, die für eine natürliche Zahl deren Quersumme ausgibt, z.B.:
crossSum(12345678)
Die Quersumme von 12345678 ist 36.
Eine mögliche Lösung für Übung 2
package uebungen.uebung2;
public class Uebung2
{
public static void printTimesTables(int nr1, int nr2)
{
for(int faktor1 = 1; faktor1<=nr1; faktor1++)
{
for(int faktor2 = 1; faktor2<=nr2; faktor2++)
{
int produkt = faktor1 * faktor2;
System.out.println(faktor1 + " * " + faktor2 + " = " + produkt);
}
System.out.println();
}
}
public static void printTimesMatrix(int nr1, int nr2)
{
for(int faktor1 = 1; faktor1 <= nr1; faktor1++)
{
for(int faktor2 = 1; faktor2 <= nr2; faktor2++)
{
int produkt = faktor1 * faktor2;
System.out.print(produkt + " ");
}
System.out.println();
}
}
public static void printTriangleUp(int height)
{
for(int row=0; row<height; row++)
{
//System.out.println("Zeile : " + row + " Sterne : " + (height-row));
for(int stars=row; stars < height; stars++)
{
System.out.print("*");
}
/*
System.out.print(" ");
for(int stars=0; stars<=row; stars++)
{
System.out.print("*");
}
System.out.print(" ");
for(int stars=0; stars<=row; stars++)
{
System.out.print("*");
}
*/
System.out.println();
}
}
public static void printXYZ()
{
int product = 36;
for(int z = -product; z <= product; z++)
{
for(int y = -product; y <= z; y++)
{
for(int x = -product; x <= y; x++)
{
//if(x * y * z == product && (x <= y) && y <= z)
if(x * y * z == product)
{
System.out.println("z=" + z + " y=" + y + " x=" + x);
}
}
}
}
}
public static void printSeconds(int seconds)
{
int minute = 60;
int hour = 60 * minute; // 3600
int day = 24 * hour; // 86400
int days = seconds / day;
int restSeconds = seconds - (days * day);
int hours = restSeconds / hour;
restSeconds = restSeconds - (hours * hour);
int minutes = restSeconds / minute;
restSeconds = restSeconds - (minutes * minute);
/*
System.out.println(seconds + " Sekunden sind " + days + " Tage, "
+ hours + " Stunden, " + minutes + " Minuten, " + restSeconds + " Sekunden.");
*/
String output = seconds + " Sekunden sind ";
if(days==1)
{
output = output + " 1 Tag, ";
}
else
{
if(days > 1)
{
output = output + days + " Tage, ";
}
}
if(hours==1)
{
output = output + " 1 Stunde, ";
}
else
{
if(hours > 1)
{
output = output + hours + " Stunden, ";
}
}
if(minutes==1)
{
output = output + " 1 Minute, ";
}
else
{
if(minutes > 1)
{
output = output + minutes + " Minuten, ";
}
}
if(restSeconds==1)
{
output = output + " 1 Sekunde.";
}
else
{
if(restSeconds > 1)
{
output = output + restSeconds + " Sekunden.";
}
}
System.out.println(output);
}
public static int crossSum(int number)
{
int sum = 0;
int rest = number % 10; // letzte Ziffer
sum = sum + rest;
int result = number / 10; // Zahl ohne letzte Ziffer
while(result > 0)
{
rest = result % 10;
sum = sum + rest;
result = result / 10;
}
return sum;
}
public static void main(String[] args)
{
System.out.println("----- Aufgabe 1 ------");
System.out.println();
printTimesTables(10, 10);
System.out.println();
System.out.println("----- Aufgabe 2 ------");
System.out.println();
printTimesMatrix(10, 10);
System.out.println();
System.out.println("----- Aufgabe 3 ------");
System.out.println();
printTriangleUp(7);
System.out.println();
System.out.println("----- Aufgabe 4 ------");
System.out.println();
printXYZ();
System.out.println();
System.out.println("----- Aufgabe 5 ------");
System.out.println();
printSeconds(3456789);
printSeconds(2345678);
printSeconds(123456);
printSeconds(12345);
System.out.println();
System.out.println("----- Aufgabe 6 ------");
System.out.println();
int number = 123456789;
int crossSum = crossSum(number);
System.out.println("Die Quersumme von " + number + " ist " + crossSum + ".");
}
}
Video zu Übung 2
Übung 3
- Erstellen Sie ein package
uebungen.uebung3
. - Erstellen Sie in diesem package eine Klasse
Uebung3
mitmain()
-Methode. - Implementieren Sie folgende Methoden:
public static int inputInt()
– in dieser Methode wird über die Konsole eineint
-Zahl eingelesen. Diese Zahl wird von der Methode zurückgegeben.public static boolean isPrime(int number)
– diese Methode prüft, ob die als Parameter übergebenenumber
eine Primzahl ist. Die Methode gibt eintrue
zurück, wennnumber
eine Primzahl ist undfalse
sonst.public static void printPrimeNumbers(int maximum)
– diese Methode gibt alle Primzahlen von 1 bis einschließlichmaximum
wie folgt auf der Konsole aus (Bsp. fürmaximum=61
):d.h. es werden die Zahlen, die Primzahlen sind, ausgegeben und für die anderen Zahlen erscheint nur ein Punkt. Verwenden Sie in der MethodeZahl : 61 .2 3 .5 .7 ...11 .13 ...17 .19 ...23 .....29 .31 .....37 ...41 .43 ...47 .....53 .....59 .61
printPrimenumbers(int)
die MethodeisPrime(int)
.public static int getSmallestDivider(int number)
– diese Methode gibt den kleinsten Teiler zurück, dernumber
ganzzahlig teilt. Istnumber
eine Primzahl, wirdnumber
zurückgegeben. Für den Fall, dassnumber
kleiner als2
ist, geben Sie ebenfallsnumber
zurück.public static String createStringOfPrimeFactorization(int number)
– diese Methode gibt einen String in folgender Form zurück (Bsp. fürnumber=632060
):d.h. alle kleinsten Teiler werden mit dem Multiplikationszeichen verbunden und am Ende erscheint" 2 * 2 * 5 * 11 * 13 * 13 * 17 = 632060 "
= Wert von number
.- Testen Sie alle Methoden. Rufen Sie insbesondere
inputInt()
,printPrimenumbers(int)
undcreateStringOfPrimeFactorization(int)
in dermain()
-Methode auf.
- Tipp: Bei der Überprüfung, ob
number
eine Primzahl ist, genügt es, Teiler bis zur Wurzel vonnumber
zu suchen. Werden bis dahin keine Teiler gefunden, istnumber
eine Primzahl. Sie können sich dazu z.B. eine Variable der Formint bound = (int) Math.sqrt(number);
erstellen und müssen dann den Teiler nur bisbound
suchen (der Typkonvertierungsoperator(int)
macht aus derdouble
-Zahl einenint
- schneidet die Nachkommastellen ab).
Eine mögliche Lösung für Übung 3
package uebungen.uebung3;
import java.util.Scanner;
public class Uebung3
{
public static int inputInt()
{
Scanner sc = new Scanner(System.in);
System.out.print("Geben Sie eine Zahl ein : ");
int number = sc.nextInt();
sc.close();
return number;
}
public static boolean isPrime(int number)
{
boolean isPrime = true; // true ist wichtig!
if(number<2)
{
isPrime = false;
}
else
{
if(number==2)
{
isPrime=true;
}
else
{
for(int divider=2; divider<=Math.sqrt(number) && isPrime; divider++)
{
if(number % divider == 0)
{
isPrime = false;
}
}
}
}
return isPrime;
}
public static void printPrimeNumbers(int maximum)
{
for(int number=1; number<=maximum; number++)
{
if(isPrime(number))
{
System.out.print(number+" ");
}
else
{
System.out.print(". ");
}
if(number%30 == 0)
{
System.out.println();
}
}
}
public static int getSmallestDivider(int number)
{
int smallestDivider = 0;
boolean found = false;
if(number<2)
{
smallestDivider = number;
}
else
{
if(isPrime(number))
{
smallestDivider = number;
}
else
{
for(int divider=2; divider<number && !found; divider++)
{
if(number % divider == 0)
{
smallestDivider = divider;
found = true;
}
}
}
}
return smallestDivider;
}
public static String createStringOfPrimeFactorization(int number)
{
String s = "";
/*
* 2 * 2 * 5 * 11 * 13 * 13 * 17 = 632060
* 632060 --> 2
* 316030 --> 2
* 158015 --> 5
* ... --> divider
* result/divider == 1
*/
int smallestDivider = getSmallestDivider(number);
s = s + smallestDivider;
int result = number/smallestDivider;
while(result > 1)
{
smallestDivider = getSmallestDivider(result);
s = s + " * " + smallestDivider;
result = result/smallestDivider;
}
s = s + " = " + number;
return s;
}
public static void main(String[] args)
{
System.out.printf("%n%n----------- Aufgabe 1 ------------ %n %n");
int number = inputInt();
System.out.println("Sie haben " + number + " eingegeben.");
System.out.printf("%n%n----------- Aufgabe 2 ------------ %n %n");
System.out.println(isPrime(number));
System.out.printf("%n%n----------- Aufgabe 3 ------------ %n %n");
printPrimeNumbers(number);
System.out.printf("%n%n----------- Aufgabe 4 ------------ %n %n");
System.out.println(getSmallestDivider(number));
System.out.printf("%n%n----------- Aufgabe 5 ------------ %n %n");
String output = createStringOfPrimeFactorization(632060);
System.out.println(output);
}
}
Video zu Übung 3
Übung 4
- Erstellen Sie ein package
uebungen.uebung4
. - Erstellen Sie in diesem package eine Klasse
Uebung4
mitmain()
-Methode. -
Implementieren Sie folgende Methoden:
-
Implementieren Sie eine
public static void print(char[] ca)
-Methode, so dass daschar[] ca
auf die Konsole ausgegeben wird. Achten Sie darauf, dass hinter dem letzten Element kein Komma steht. Testen Sie Ihre Methode auch für ein leeres Array.
Bsp:print(['a', 'b', 'c', 'a', 'c', 'a', 'b', 'c'])
Ausgabe auf Konsole:[a, b, c, a, c, a, b, c]
-
Kopieren Sie die
print
-Methode vollständig und ändern Sie den Typ des Parameters vonchar[]
inint[]
. (Die Methode ist jetzt überladen undprint()
kann jetzt entweder einchar[]
oder einint[]
übergeben werden, welches auf die Konsole ausgegeben wird.) -
Implementieren Sie eine Methode
public static char[] stringToCharArray(String s)
. Diese Methode wandelt einenString
in einchar[]
um, so dass jedes Zeichen des Strings imchar[]
enthalten ist. Daschar[]
wird zurückgegeben. Tipps: die Länge eines Strings wird mit der Objektmethodelength()
ermittelt. Die einzelnen Zeichen eines Strings können mithilfe dercharAt(index)
-Objektmethode von Strings ermittelt werden. Siehe String
Bsp.:stringToCharArray("hallo!")
→['h','a','l','l','o','!']
-
Implementieren Sie eine Methode
public static char[] filter(char[] carr, char filter)
, der als Parameter einchar
-Array und einchar
übergeben wird. Die Methode soll einchar
-Array zurückgeben, das dem als Parameter übergeben Array entspricht, außer dass jedes Vorkommen des als Parameter übergebencarr
entfernt wurde
Bsp:filter(['a', 'b', 'c', 'a', 'c', 'a', 'b', 'c'], 'c')
→['a', 'b', 'a', 'a', 'b']
-
Implementieren Sie eine Methode
public static int[] minAndMax(int[] iarr)
, der einint
-Array als Parameter übergeben wird und die ein zweielementiges Array zurückgibt. Das erste Element des zurückgegeben Arrays ist das Minimum des als Parameter übergebenen Arrays und das zweite Element ist das Maximum.
Bsp.:minAndMax([4,2,8,1,6,2,4,1,8])
→[1,8]
minAndMax([4])
→[4,4]
-
Implementieren Sie eine Methode
public static int[] reverse(int[] iarr)
, der einint
-Array übergeben wird und die die Reihenfolge der Elemente des Arrays umdreht (das letzte zuerst usw.) Das neuerstellte Array wird zurückgegeben.
Bsp.:reverse([4,2,8,1,6,2,4,1,8])
→[8,1,4,2,6,1,8,2,4]
reverse([4])
→[4]
-
Zusatz: Implementieren Sie eine Methode
public static boolean containsDoublets(char[] ca)
die eintrue
zurückgibt, wenn mindestens ein Wert inca
mindestens zwei Mal vorkommt (wenn Sie schon dabei sind, können Sie sich auch überlegen, wenn genau ein Wert genau zwei Mal vorkommt - oder mindestens ein Wert genau zwei Mal - oder genau ein Wert mindestens zwei Mal) undfalse
sonst.
-
Eine mögliche Lösung für Übung 4
package uebungen.uebung4;
public class Uebung4
{
public static void print(char[] ca)
{
System.out.print("[ ");
/*
for (int index = 0; index < ca.length-1; index++)
{
System.out.print(ca[index] + ", ");
}
if(ca.length>0)
{
System.out.print(ca[ca.length-1]);
}
*/
for (int index = 0; index < ca.length; index++)
{
if(index < ca.length-1)
{
System.out.print(ca[index] + ", ");
}
else // letztes Element
{
System.out.print(ca[index]);
}
}
System.out.println(" ]");
}
public static void print(int[] ca)
{
System.out.print("[ ");
for (int index = 0; index < ca.length; index++)
{
if(index < ca.length-1)
{
System.out.print(ca[index] + ", ");
}
else // letztes Element
{
System.out.print(ca[index]);
}
}
System.out.println(" ]");
}
public static char[] filter(char[] carr, char filter)
{
// filter(['a', 'b', 'c', 'a', 'c', 'a', 'b', 'c'], 'c') → ['a', 'b', 'a', 'a', 'b']
// Laenge des neuen Arrays ermitteln
// Anzahl des Vorkommens von filter in carr
// Laenge von carr - Anzahl des Vorkommens
int nrOfOccurrences = 0;
for (int index = 0; index < carr.length; index++)
{
if(carr[index]==filter)
{
nrOfOccurrences++;
}
}
int newLength = carr.length - nrOfOccurrences;
// Erzeugen des neuen Arrays
char[] caNew = new char[newLength];
// Befuellen des neuen Arrays
int indexNewArr = 0;
for (int index = 0; index < carr.length; index++)
{
if(carr[index]!=filter)
{
caNew[indexNewArr] = carr[index];
indexNewArr++;
}
}
return caNew;
}
public static char[] stringToCharArray(String s)
{
char[] ca = new char[s.length()];
for (int index = 0; index < ca.length; index++)
{
ca[index] = s.charAt(index);
}
return ca;
}
public static int[] minAndMax(int[] iarr)
{
int curMin = iarr[0];
int curMax = iarr[0];
for (int index = 0; index < iarr.length; index++)
{
if(iarr[index] < curMin)
{
curMin = iarr[index];
}
if(iarr[index] > curMax)
{
curMax = iarr[index];
}
}
// int[] ra = { curMin, curMax };
int[] ra = new int[2];
ra[0] = curMin;
ra[1] = curMax;
return ra;
}
public static int[] reverse(int[] iarr)
{
int[] iaNew = new int[iarr.length];
for (int index = 0; index < iaNew.length; index++)
{
iaNew[index] = iarr[iarr.length-1 - index];
}
return iaNew;
}
/*
* ----------- ab hier Zusatzaufgabe -------------------
*
* fuer die Zusatzaufgabe containsDoublets(char[])
* schreiben wir uns erstmal eine Hilfsmethode
* nrOfOccurrences(char[] ca. char element), die ermittelt,
* wie oft ein element in ca vorkommt
*/
public static int norOfOccurrences(char[] ca, char element)
{
int nrOfOccurrences = 0;
for (int index = 0; index < ca.length; index++)
{
if(ca[index] == element)
{
nrOfOccurrences++;
}
}
return nrOfOccurrences;
}
public static boolean containsDoublets(char[] ca)
{
boolean doublet = false;
for (int index = 0; index < ca.length && !doublet; index++)
{
if (norOfOccurrences(ca, ca[index]) >= 2)
{
doublet = true;
}
}
return doublet;
}
public static void main(String[] args)
{
System.out.printf("%n%n ---------------- Aufgabe 1 ----------%n%n");
char[] carr1 = new char[10];
char c1 = 'w';
carr1[0] = 'w';
carr1[1] = 'i';
carr1[2] = 'o';
carr1[3] = 'u';
carr1[4] = 'w';
carr1[5] = 'r';
carr1[6] = 'e';
carr1[7] = '2';
carr1[8] = '!';
carr1[9] = 'q';
// carr1[10] = 'w'; // ArrayIndexOutOfBoundsException
char[] carr2 = {'a', 'b', 'c', 'a', 'c', 'a', 'b', 'c'};
print(carr1);
print(carr2);
char[] carr3 = new char[0];
print(carr3);
System.out.printf("%n%n ---------------- Aufgabe 2 ----------%n%n");
int[] iarr1 = { 4,2,8,1,6,2,4,1,8 };
print(iarr1);
System.out.printf("%n%n ---------------- Aufgabe 3 ----------%n%n");
String s1 = "Hallo FIW!";
// System.out.println(s1.charAt(9));
char[] carr4 = stringToCharArray(s1);
print(carr4);
System.out.printf("%n%n ---------------- Aufgabe 4 ----------%n%n");
print(carr2);
char[] carr5 = filter(carr2, 'c');
print(carr5);
carr5 = filter(carr2, 'a');
print(carr5);
carr5 = filter(carr2, 'b');
print(carr5);
carr5 = filter(carr2, 'd');
print(carr5);
System.out.printf("%n%n ---------------- Aufgabe 5 ----------%n%n");
int[] iarr2 = minAndMax(iarr1);
print(iarr2);
System.out.println("Minimum : " + iarr2[0] + " Maximum : " + iarr2[1]);
int[] iarr3 = { 4 };
iarr2 = minAndMax(iarr3);
print(iarr2);
System.out.println("Minimum : " + iarr2[0] + " Maximum : " + iarr2[1]);
System.out.printf("%n%n ---------------- Aufgabe 6 ----------%n%n");
int[] iarr4 = reverse(iarr1);
print(iarr1);
print(iarr4);
System.out.printf("%n%n ---------------- Zusatzaufgabe ----------%n%n");
System.out.println(containsDoublets(carr2));
char[] carr6 = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'};
char[] carr7 = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'a'};
char[] carr8 = { };
char[] carr9 = { 'a', 'a'};
System.out.println(containsDoublets(carr6));
System.out.println(containsDoublets(carr7));
System.out.println(containsDoublets(carr8));
System.out.println(containsDoublets(carr9));
}
}
Video zu Übung 4
Übung 5
- Erstellen Sie ein package
uebungen.uebung5
. - Erstellen Sie in diesem package eine Klasse
Uebung5
mitmain()
-Methode. -
Vorabinformation:
-
Wir implementieren Würfe eines Würfels. Alle Würfe werden in einem Array
statistics
gespeichert. Das Array hat die Länge 6 und beschreibt, wie oft eine 1, wie oft eine 2, ..., wie oft eine 6 gewürfelt wurde.
-
-
Erstellen Sie sich in der
main()
-Methode zunächst dasstatistics
-Array. Alle Elemente des Arrays sind vom Typint
und es hat die Länge6
. -
Implementieren Sie folgende Methoden:
-
Implementieren Sie eine
public static int throwDice()
-Methode, die eine Zufallszahl aus dem Wertebereich[1, ... , 6]
erzeugt und zurückgibt. -
Implementieren Sie eine Methode
public static void printThrow(int cast)
, die den Wert des übergebenen Wurfes (cast
) wie folgt ausgibt (Beispielcast==5
):Es wurde eine 5 gewuerfelt
-
Testen Sie beide Methoden, indem Sie in der
main()
-Methode eingeben:System.out.printf("%n%n------------------- Test throwDice and printThrow -------------------%n%n"); for(int index=0; index<10; index++) { int cast = throwDice(); printThrow(cast); }
Sie sollten eine Ausgabe in folgender Form bekommen (Zufallszahlen):
------------------- Test throwDice and printThrow ------------------- Es wurde eine 5 gewuerfelt Es wurde eine 4 gewuerfelt Es wurde eine 6 gewuerfelt Es wurde eine 5 gewuerfelt Es wurde eine 3 gewuerfelt Es wurde eine 4 gewuerfelt Es wurde eine 1 gewuerfelt Es wurde eine 5 gewuerfelt Es wurde eine 6 gewuerfelt Es wurde eine 6 gewuerfelt
-
Implementieren Sie eine Methode
public static int[] insertIntoStatistics(int[] statistics, int cast)
. Dasstatistics
-Array wird als Parameter übergeben und dasstatistics
-Array selbst wird auch wieder zurückgegeben! Imstatistics
-Array wird der Wert an der Stelle um1
erhöht, der dem Wurfcast
entspricht. D.h. wurde eine1
gewürfelt, wird der Wert im Index0
um1
erhöht, wurde eine2
gewürfelt, der Wert im Index1
usw. (siehe auch oben die Abbildung zustatistics
) -
Implementieren Sie eine Methode
public static void printStatistics(int[] statistics)
, die dasstatistics
-Array wie folgt auf die Konsole ausgibt.Angenommen, das
statistics
-Array ist so befüllt:[ 3,8,4,5,8,2 ]
, dann ist die Ausgabe auf der Konsole:[ (3 x 1), (8 x 2), (4 x 3), (5 x 4), (8 x 5), (2 x 6) ]
-
Testen Sie beide Methoden, indem Sie in der
main()
-Methode eingeben:System.out.printf("%n%n------------------ Test insert- and printStatistics -----------------%n%n"); for(int index=0; index<100; index++) { int cast = throwDice(); statistics = insertIntoStatistics(statistics, cast); } printStatistics(statistics);
Es wird angenommen, dass Sie das
statistics
-Array bereits gleich am Anfang in dermain()
erzeugt haben - wenn nicht, können Sie das auch hier machen. Beachten Sie den Aufruf vonstatistics = insertIntoStatistics(statistics, cast);
. DieinsertIntoStatistics()
-Methode bekommt dasstatistics
-Array als Parameter übergeben, gibt es selbst wieder zurück und in dermain()
-Methode speichern wir die Rückgabe wieder in derstatistics
-Referenz. Das ist zwar so gar nicht nötig, aber das lernen wir erst, wenn es um Objekte geht. Jetzt ist es völlig in Ordnung, das so zu machen.Sie sollten eine Ausgabe in folgender Form bekommen (Zufallszahlen):
------------------ Test insert- and printStatistics ----------------- [ (20 x 1), (13 x 2), (16 x 3), (15 x 4), (19 x 5), (17 x 6) ]
-
Implementieren Sie eine Methode
public static int sumOfStatistics(int[] statistics)
, die eine Summe über alle Werte imstatistics
-Array wie folgt berechnet:Beispiel: Angenommen, das Array ist so befüllt:
[ 3,8,4,5,8,2 ]
, dann ist die Summe:3x1 + 8x2 + 4x3 + 5x4 + 8x5 + 2x6 = 3 + 16 + 12 + 20 + 40 + 12 = 103
. Die Summe103
wird zurückgegeben. -
Testen Sie die Methode, indem Sie in der
main()
-Methode eingeben:System.out.printf("%n%n--------------------- Test sumOfStatistics --------------------------%n%n"); printStatistics(statistics); int sumTest = sumOfStatistics(statistics); System.out.println("Summe = " + sumTest);
Das
statistics
-Array ist ja bereits oben befüllt worden, das müssen wir hier also nicht mehr machen. Sie sollten eine Ausgabe in folgender Form bekommen (Zufallszahlen):--------------------- Test sumOfStatistics -------------------------- [ (14 x 1), (15 x 2), (11 x 3), (16 x 4), (27 x 5), (17 x 6) ] Summe = 378
-
Zusatz: Implementieren Sie eine Methode
public static int throwDiceUntilTarget(int target, int[] statistics)
, die so lange einen Würfel würfelt, bis als Summe der Augen dastarget
erreicht ist. Die Anzahl der Würfe wird zurückgegeben. In dieser Methode erfolgen folgende Aufrufe:- nach jedem Wurf (
throwDice()
) wird der Wurf ausgegeben (printThrow()
) - jeder Wurf wird in das
statistics
-Array eingetragen (insertIntoStatistics()
) - nach jedem Wurf wird die Summme aller Augen aller bisherigen Würfe ermittelt (
sumOfStatistics()
). - so lange die Summe kleiner ist als das
target
, wird weiter gewürfelt
- nach jedem Wurf (
-
Testen Sie die Methode, indem Sie in der
main()
-Methode eingeben:System.out.printf("%n%n------------------- Test throwDiceUntilTarget -----------------------%n%n"); statistics = new int[6]; // altes Array war schon befuellt final int TARGET = 100; int tries = throwDiceUntilTarget(TARGET, statistics); printStatistics(statistics); int sum = sumOfStatistics(statistics); System.out.println("Es wurden " + tries + " Versuche benötigt, um " + sum + " Punkte zu erzielen.");
Da das
statistics
-Array zuvor bereits befüllt war, erstellen wir es für das Testen dieser Methode nochmal neu. Sie sollten eine Ausgabe in folgender Form bekommen (Zufallszahlen):------------------- Test throwDiceUntilTarget ----------------------- Es wurde eine 5 gewuerfelt Es wurde eine 1 gewuerfelt Es wurde eine 5 gewuerfelt Es wurde eine 3 gewuerfelt Es wurde eine 5 gewuerfelt Es wurde eine 2 gewuerfelt Es wurde eine 5 gewuerfelt Es wurde eine 3 gewuerfelt Es wurde eine 4 gewuerfelt Es wurde eine 3 gewuerfelt Es wurde eine 3 gewuerfelt Es wurde eine 3 gewuerfelt Es wurde eine 1 gewuerfelt Es wurde eine 1 gewuerfelt Es wurde eine 2 gewuerfelt Es wurde eine 3 gewuerfelt Es wurde eine 6 gewuerfelt Es wurde eine 3 gewuerfelt Es wurde eine 3 gewuerfelt Es wurde eine 2 gewuerfelt Es wurde eine 3 gewuerfelt Es wurde eine 2 gewuerfelt Es wurde eine 6 gewuerfelt Es wurde eine 4 gewuerfelt Es wurde eine 3 gewuerfelt Es wurde eine 1 gewuerfelt Es wurde eine 4 gewuerfelt Es wurde eine 3 gewuerfelt Es wurde eine 4 gewuerfelt Es wurde eine 1 gewuerfelt Es wurde eine 6 gewuerfelt [ (5 x 1), (4 x 2), (11 x 3), (4 x 4), (4 x 5), (3 x 6) ] Es wurden 31 Versuche benötigt, um 100 Punkte zu erzielen.
Es muss das
target
nicht exakt getroffen werden, das ist Zufall. Es stoppt, sobald100
oder mehr Punkte erreicht wurden.
-
Eine mögliche Lösung für Übung 5
package uebungen.uebung5;
import java.util.Random;
public class Uebung5
{
public static int throwDice()
{
Random r = new Random();
int wurf = r.nextInt(6) + 1;
return wurf;
}
public static void printThrow(int cast)
{
System.out.println("Es wurde eine " + cast + " gewuerfelt");
}
public static int[] insertIntoStatistics(int[] statistics, int cast)
{
if(cast>=1 && cast<=6)
{
statistics[cast-1]++;
}
return statistics;
}
public static void printStatistics(int[] statistics)
{
System.out.print("[ ");
for (int index = 0; index < statistics.length; index++) // index = index + 1
{
if(index < statistics.length-1)
{
System.out.print("(" + statistics[index] + " x " + (index+1) + "), ");
}
else // index == statistics.length-1
{
System.out.print("(" + statistics[index] + " x " + (index+1) + ")");
}
}
System.out.println(" ]");
}
public static int sumOfStatistics(int[] statistics)
{
int sum = 0;
for (int index = 0; index < statistics.length; index++)
{
sum = sum + (statistics[index] * (index+1));
}
return sum;
}
public static int throwDiceUntilTarget(int target, int[] statistics)
{
int tries = 0;
int cast = throwDice();
printThrow(cast); // Nebeneffekt - nicht so gut!
tries++;
insertIntoStatistics(statistics, cast);
int sum = sumOfStatistics(statistics);
while(sum < target)
{
cast = throwDice();
printThrow(cast); // Nebeneffekt - nicht so gut!
tries++;
insertIntoStatistics(statistics, cast);
sum = sumOfStatistics(statistics);
}
return tries;
}
public static void main(String[] args)
{
int[] statistics = new int[6];
System.out.printf("%n%n------------------- Test throwDice and printThrow -------------------%n%n");
for(int index=0; index<10; index++)
{
int cast = throwDice();
printThrow(cast);
}
System.out.printf("%n%n------------------ Test insert- and printStatistics -----------------%n%n");
for(int index=0; index<100; index++)
{
int cast = throwDice();
statistics = insertIntoStatistics(statistics, cast);
}
printStatistics(statistics);
System.out.printf("%n%n--------------------- Test sumOfStatistics --------------------------%n%n");
printStatistics(statistics);
int sumTest = sumOfStatistics(statistics);
System.out.println("Summe = " + sumTest);
System.out.printf("%n%n------------------- Test throwDiceUntilTarget -----------------------%n%n");
statistics = new int[6]; // altes Array war schon befuellt
final int TARGET = 100;
int tries = throwDiceUntilTarget(TARGET, statistics);
printStatistics(statistics);
int sum = sumOfStatistics(statistics);
System.out.println("Es wurden " + tries + " Versuche benötigt, um " + sum + " Punkte zu erzielen.");
}
}
Video zu Übung 5
Übung 6
- Erstellen Sie ein package
uebungen.uebung6
. - Erstellen Sie in diesem package eine Klasse
Konto
(ohnemain()
-Methode!) - Erstellen Sie in diesem package eine Klasse
Testklasse
mitmain()
-Methode - Erstellen Sie in der Klasse
Konto
zwei Objektvariablenguthaben
vom Typdouble
→ nur in der Klasse sichtbar!pin
vom Typint
→ ebenfalls nur in der Klasse sichtbar!
- Erstellen Sie in der Klasse
Konto
einen Konstruktor fürKonto
- diesem Konstruktor wird als Parameter
int pPin
übergeben - mit dem Wert des Parameters wird innerhalb des Konstruktors der Wert von
pin
initialisiert - Initialisieren Sie im Konstruktor auch die Objektvariable
guthaben
. Sie bekommt den Wert0.0
(hierfür haben wir also keinen Parameter, wir setzen den initialen Wert einfach generell auf0.0
)
- diesem Konstruktor wird als Parameter
- Erstellen Sie in der Klasse
Konto
eine Objektmethodeeinzahlen(double betrag)
- diese Objektmethode ist
public
und gibt nichts zurück - in dieser Methode wird der Wert der Objektvariablen
guthaben
um den Wert vonbetrag
erhöht - erzeugen Sie in dieser Methode außerdem eine Ausgabe in der Form:
falls der
Es wurden 100,00 Euro eingezahlt.
betrag
den Wert100.0
hatte. Verwenden Sie am besten dieprintf()
-Methode, um stets genau 2 Stellen nach dem Komma des Betrages auszugeben (siehe hier).
- diese Objektmethode ist
- Geben Sie in der
main()
-Methode derTestklasse
ein:und führen Sie dieKonto k1 = new Konto(1234); k1.einzahlen(100.0); k1.einzahlen(50.0); k1.einzahlen(150.0);
Testklasse
aus. Es sollten folgende Ausgaben erzeugt werden:Es wurden 100,00 Euro eingezahlt. Es wurden 50,00 Euro eingezahlt. Es wurden 150,00 Euro eingezahlt.
- Erstellen Sie in der Klasse
Konto
eine Objektmethodekontoauszug(int pPin)
- diese Objektmethode ist
public
und gibt nichts zurück - einen
kontoauszug(int pPin)
können Sie nur "ziehen", wenn der Parameterwert vonpPin
mit dem Wert der Objektvariablenpin
übereinstimmt - wird der richtige Wert für die
pin
übergeben, geben Sie dasguthaben
in der folgenden Form aus:fallsIhr aktuelles Guthaben betraegt 300,00 Euro.
guthaben
den Wert von300.0
hat. - wird ein falscher Wert für die
pin
übergeben, geben Sie folgende Ausgabe aus:Falsche PIN!
- diese Objektmethode ist
- Erweitern Sie die
main()
-Methode der Testklasse um folgende Anweisungen:und führen Sie diek1.kontoauszug(1235); // Falsche PIN! k1.kontoauszug(1234);
Testklasse
aus. Es sollten folgende (weitere) Ausgaben erzeugt werden:Falsche PIN! Ihr aktuelles Guthaben betraegt 300,00 Euro.
- Erstellen Sie in der Klasse
Konto
eine Objektmethodeauszahlen(int pPin, double betrag)
- diese Objektmethode ist
public
und gibt nichts zurück - es kann nur etwas ausgezahlt werden, wenn der Parameterwert von
pPin
mit dem Wert der Objektvariablenpin
übereinstimmt - stimmen die Werte nicht überein, geben Sie erneut
aus.
Falsche PIN!
- stimmt der
pin
-Wert, dann müssen Sie prüfen, ob dasguthaben
reicht, umbetrag
auszuzahlen. Ist nicht genugguthaben
vorhanden, dann geben Sie ausfallsIhr Guthaben reicht nicht, um 400,00 Euro auszuzahlen.
betrag
den Wert400.0
hatte. - wenn der
pin
-Wert stimmt und genugguthaben
vorhanden ist, um denbetrag
auszuzahlen, dann reduzieren Sieguthaben
um den entsprechendenbetrag
und geben ausfalls derEs wurden 100,00 Euro ausgezahlt.
betrag
den Wert100.0
hatte.
- diese Objektmethode ist
- Erweitern Sie die
main()
-Methode der Testklasse um folgende Anweisungen:und führen Sie diek1.auszahlen(1235, 100.0); // Falsche PIN! k1.auszahlen(1234, 100.0); k1.kontoauszug(1234); k1.auszahlen(1234, 300.0); // Guthaben reicht nicht k1.auszahlen(1234, 200.0); k1.kontoauszug(1234);
Testklasse
aus. Es sollten folgende (weitere) Ausgaben erzeugt werden:Falsche PIN! Es wurden 100,00 Euro ausgezahlt. Ihr aktuelles Guthaben betraegt 200,00 Euro. Ihr Guthaben reicht nicht, um 300,00 Euro auszuzahlen. Es wurden 200,00 Euro ausgezahlt. Ihr aktuelles Guthaben betraegt 0,00 Euro.
- Zusatz:
- Erweitern Sie die Klasse um eine weitere Objektvariable
private double dispogrenze
- Initialisieren Sie diese Variable innerhalb des Konstruktors (ohne weiteren Parmeter) auf den Wert
-1000.0
. Sie dürfen somit Ihr Konto um1000.00 Euro
überziehen. - Passen Sie die
auszahlen()
-Methode entsprechend an, so dass es auch möglich ist, einenbetrag
auszuzahlen, so lange man nicht unter diedispogrenze
fällt. - Erstellen Sie eine Methode
public void zinsenZahlen()
.- Erstellen Sie in dieser Methode zwei Konstanten
DISPOZINSEN
vom Typdouble
bekommt den Wert12.0
(soll12%
entsprechen) undGUTHABENZINSEN
vom Typdouble
bekommt den Wert0.5
(soll0.5%
entsprechen)
- Berechnen Sie innerhalb der Methode die Zinsen für das Konto
DISPOZINSEN
werden fällig (werden vonguthaben
abgezogen), fallsguthaben
negativ istGUTHABENZINSEN
werden gewährt (werden zuguthaben
addiert), fallsguthaben
positiv ist- passen Sie den Wert von
guthaben
entsprechend an - erzeugen Sie entsprechende Ausgaben, z.B.
bzw.
Ihnen wurden 18,00 Euro Zinsen abgebucht.
Ihnen wurden 4,16 Euro Zinsen gutgeschrieben.
- Erstellen Sie in dieser Methode zwei Konstanten
- Angenommen, die gesamte
main()
-Methode sieht jetzt so aus:dann sollten Sie folgende Ausgabe erzeugen (gilt nur für Zusatz!):public static void main(String[] args) { Konto k1 = new Konto(1234); k1.einzahlen(100.0); k1.einzahlen(50.0); k1.einzahlen(150.0); k1.kontoauszug(1235); // Falsche PIN! k1.kontoauszug(1234); k1.auszahlen(1235, 100.0); // Falsche PIN! k1.auszahlen(1234, 100.0); k1.kontoauszug(1234); k1.auszahlen(1234, 300.0); k1.auszahlen(1234, 200.0); k1.kontoauszug(1234); k1.einzahlen(150.0); k1.kontoauszug(1234); k1.zinsenZahlen(); k1.kontoauszug(1234); k1.einzahlen(1000.0); k1.kontoauszug(1234); k1.zinsenZahlen(); k1.kontoauszug(1234); }
Es wurden 100,00 Euro eingezahlt. Es wurden 50,00 Euro eingezahlt. Es wurden 150,00 Euro eingezahlt. Falsche PIN! Ihr aktuelles Guthaben betraegt 300,00 Euro. Falsche PIN! Es wurden 100,00 Euro ausgezahlt. Ihr aktuelles Guthaben betraegt 200,00 Euro. Es wurden 300,00 Euro ausgezahlt. Es wurden 200,00 Euro ausgezahlt. Ihr aktuelles Guthaben betraegt -300,00 Euro. Es wurden 150,00 Euro eingezahlt. Ihr aktuelles Guthaben betraegt -150,00 Euro. Ihnen wurden 18,00 Euro Zinsen abgebucht. Ihr aktuelles Guthaben betraegt -168,00 Euro. Es wurden 1000,00 Euro eingezahlt. Ihr aktuelles Guthaben betraegt 832,00 Euro. Ihnen wurden 4,16 Euro Zinsen gutgeschrieben. Ihr aktuelles Guthaben betraegt 836,16 Euro.
- Erweitern Sie die Klasse um eine weitere Objektvariable
Eine mögliche Lösung für Übung 6
package uebungen.uebung6;
public class Konto
{
private double guthaben;
private int pin;
private double dispogrenze;
public Konto(int pPin)
{
guthaben = 0;
pin = pPin;
dispogrenze = -1000.0;
}
public void einzahlen(double betrag)
{
guthaben = guthaben + betrag;
System.out.printf("Es wurden %.2f Euro eingezahlt.%n", betrag);
}
public void auszahlen(int pPin, double betrag)
{
if(pin==pPin)
{
if(guthaben - dispogrenze >= betrag)
{
guthaben = guthaben - betrag;
System.out.printf("Es wurden %.2f Euro ausgezahlt.%n", betrag);
}
else
{
System.out.printf("Ihr Guthaben reicht nicht, um %.2f Euro auszuzahlen.%n", betrag);
}
}
else
{
System.out.println("Falsche PIN!");
}
}
public void kontoauszug(int pPin)
{
if(pin==pPin)
{
System.out.printf("Ihr aktuelles Guthaben betraegt %.2f Euro.%n", guthaben);
}
else
{
System.out.println("Falsche PIN!");
}
}
public void zinsenZahlen()
{
final double DISPOZINSEN = 12.0;
final double GUTHABENZINSEN = 0.5;
if(guthaben >0)
{
double zinsen = guthaben * GUTHABENZINSEN / 100.0;
guthaben = guthaben + zinsen;
System.out.printf("Ihnen wurden %.2f Euro Zinsen gutgeschrieben.%n", zinsen);
}
else
{
double zinsen = guthaben * DISPOZINSEN / 100.0; // ist negativ!
guthaben = guthaben + zinsen;
System.out.printf("Ihnen wurden %.2f Euro Zinsen abgebucht.%n", -zinsen);
}
}
}
package uebungen.uebung6;
public class Testklasse
{
public static void main(String[] args)
{
Konto k1 = new Konto(1234);
k1.einzahlen(100.0);
k1.einzahlen(50.0);
k1.einzahlen(150.0);
k1.kontoauszug(1235); // Falsche PIN!
k1.kontoauszug(1234);
k1.auszahlen(1235, 100.0); // Falsche PIN!
k1.auszahlen(1234, 100.0);
k1.kontoauszug(1234);
k1.auszahlen(1234, 300.0);
k1.auszahlen(1234, 200.0);
k1.kontoauszug(1234);
k1.einzahlen(150.0);
k1.kontoauszug(1234);
k1.zinsenZahlen();
k1.kontoauszug(1234);
k1.einzahlen(1000.0);
k1.kontoauszug(1234);
k1.zinsenZahlen();
k1.kontoauszug(1234);
}
}
Übung 7
- Erstellen Sie ein package
uebungen.uebung7
. - Erstellen Sie in diesem package eine Klasse
Rectangle
(ohnemain()
-Methode!) - Erstellen Sie in diesem package eine Klasse
Testklasse
mitmain()
-Methode - Erstellen Sie in der Klasse
Rectangle
zwei Objektvariablena
vom Typint
→ nur in der Klasse sichtbar!b
vom Typint
→ ebenfalls nur in der Klasse sichtbar!a
undb
sollen die Seiten des Rechtecks sein.
- Implementieren Sie einen parameterlosen Konstruktor
Rectangle()
, der für die Seitea
den Wert10
und für die Seiteb
den Wert20
setzt. - Implementieren Sie einen parametrisierten Konstruktor
Rectangle(int a, int b)
, der die Parameterwerte zum Initialisieren der Seiten verwendet. - Implementieren Sie eine Objektmethode
public int area()
, die den Flächeninhalt des Rechtecks zurückgibt. - Implementieren Sie eine Objektmethode
public int perimeter()
, die den Umfang des Rechtecks zurückgibt. - Implementieren Sie eine Objektmethode
public String toString()
, die einenString
mit allen Informationen des Rechtecks in der folgenden Formzurückgibt.Rectangle : ( a=10, b=20, area=200, perimeter=60 )
- Implementieren Sie eine Objektmethode
public void print()
, die den durchtoString()
erzeugtenString
auf die Konsole ausgibt. - Geben Sie in der
main()
-Methode derTestklasse
ein:und führen Sie die// Objekte erzeugen Rectangle r1 = new Rectangle(); Rectangle r2 = new Rectangle(12, 18); Rectangle r3 = new Rectangle(40, 5); Rectangle r4 = new Rectangle(20, 10); Rectangle r5 = new Rectangle(11, 21); System.out.printf("%n%n--------------- print()-Methode -----------------%n%n"); r1.print(); r2.print(); r3.print(); r4.print(); r5.print();
Testklasse
aus. Es sollten folgende Ausgaben erzeugt werden:--------------- print()-Methode ----------------- Rectangle : ( a=10, b=20, area=200, perimeter=60 ) Rectangle : ( a=12, b=18, area=216, perimeter=60 ) Rectangle : ( a=40, b= 5, area=200, perimeter=90 ) Rectangle : ( a=20, b=10, area=200, perimeter=60 ) Rectangle : ( a=11, b=21, area=231, perimeter=64 )
- Implementieren Sie eine Objektmethode
public boolean sidesAreEqual(Rectangle r)
, die eintrue
zurückgibt, wenn die Seiten des aufrufenden Objektes gleich den Seiten des Rectangler
sind. Beachten Sie, dass das Rechteck auch gedreht noch gleiche Seiten haben soll, alsoa=10, b=20
ist nicht nur mita=10, b=20
gleich, sondern auch mita=20, b=10
. Wenn die Seiten ungleich sind, gibt die Methode einfalse
zurück. - Implementieren Sie eine Objektmethode
public boolean areasAreEqual(Rectangle r)
, die eintrue
zurückgibt, wenn die Flächeninhalte des aufrufenden Objektes und des Rectangler
gleich sind. Ansonstenfalse
. - Implementieren Sie eine Objektmethode
public boolean perimetersAreEqual(Rectangle r)
, die eintrue
zurückgibt, wenn die Umfänge des aufrufenden Objektes und des Rectangler
gleich sind. Ansonstenfalse
. - Implementieren Sie eine Objektmethode
public void printComparison(Rectangle r)
, die die Vergleiche mitr
in der unten dargestellten Form ausgibt. Rufen Sie in der Methode die Methodenprint()
(odertoString()
),sidesAreEqual()
,areasAreEqual()
undperimetersAreEqual()
auf. - Fügen Sie in der
main()
-Methode derTestklasse
folgende Anweisungen hinzu:und führen Sie dieSystem.out.printf("%n%n---------- printComparison()-Methode ------------%n%n"); r1.printComparison(r2); r1.printComparison(r3); r1.printComparison(r4); r1.printComparison(r5);
Testklasse
aus. Es sollten folgende zusätzliche Ausgaben erzeugt werden:---------- printComparison()-Methode ------------ this Rectangle : ( a=10, b=20, area=200, perimeter=60 ) the other Rectangle : ( a=12, b=18, area=216, perimeter=60 ) sides are not equal areas are not equal perimeters are equal this Rectangle : ( a=10, b=20, area=200, perimeter=60 ) the other Rectangle : ( a=40, b= 5, area=200, perimeter=90 ) sides are not equal areas are equal perimeters are not equal this Rectangle : ( a=10, b=20, area=200, perimeter=60 ) the other Rectangle : ( a=20, b=10, area=200, perimeter=60 ) sides are equal areas are equal perimeters are equal this Rectangle : ( a=10, b=20, area=200, perimeter=60 ) the other Rectangle : ( a=11, b=21, area=231, perimeter=64 ) sides are not equal areas are not equal perimeters are not equal
- Zusatz:
- Implementieren Sie eine Objektmethode
public double diagonal()
, die die Länge einer Diagonalen des Rechtecks zurückgibt. - Erweitern Sie die
toString()
-Methode um die Ausgabe dieser Länge wie folgt:Es sollen drei Nachkommastellen der Länge der Diagonalen ausgegeben werden.Rectangle : ( a=10, b=20, area=200, perimeter=60, diagonal=22,361 ) Rectangle : ( a=12, b=18, area=216, perimeter=60, diagonal=21,633 ) Rectangle : ( a=40, b= 5, area=200, perimeter=90, diagonal=40,311 ) Rectangle : ( a=20, b=10, area=200, perimeter=60, diagonal=22,361 ) Rectangle : ( a=11, b=21, area=231, perimeter=64, diagonal=23,707 )
- Implementieren Sie eine Objektmethode
public void scale(int factor)
. Diese Methode "skaliert" das Rechteck um den Faktorfactor
, genauer gesagt, wird der Flächeninhalt um diesen Faktor skaliert. Die neuen Seiten sollen das gleiche Verhältnis zueinander haben, wie die alten Seiten. Geben Sie die neuen Seitenlängen in der folgenden Form auf die Konsole aus (siehe nächsten Punktmain()
). - Fügen Sie in der
main()
-Methode derTestklasse
folgende Anweisungen hinzu:und führen Sie dieSystem.out.printf("%n%n--------------- scale()-Methode -----------------%n%n"); r1.scale(2); r2.scale(2); r3.scale(2); r4.scale(2); r5.scale(2); r1.scale(10); r2.scale(10); r3.scale(10); r4.scale(10); r5.scale(10);
Testklasse
aus. Es sollten folgende zusätzliche Ausgaben erzeugt werden:--------------- scale()-Methode ----------------- newArea= 400,00 newA= 14,14 newB= 28,28 check (newA*newB)= 400,00 newArea= 432,00 newA= 16,97 newB= 25,46 check (newA*newB)= 432,00 newArea= 400,00 newA= 56,57 newB= 7,07 check (newA*newB)= 400,00 newArea= 400,00 newA= 28,28 newB= 14,14 check (newA*newB)= 400,00 newArea= 462,00 newA= 15,56 newB= 29,70 check (newA*newB)= 462,00 newArea= 2000,00 newA= 31,62 newB= 63,25 check (newA*newB)=2000,00 newArea= 2160,00 newA= 37,95 newB= 56,92 check (newA*newB)=2160,00 newArea= 2000,00 newA=126,49 newB= 15,81 check (newA*newB)=2000,00 newArea= 2000,00 newA= 63,25 newB= 31,62 check (newA*newB)=2000,00 newArea= 2310,00 newA= 34,79 newB= 66,41 check (newA*newB)=2310,00
- Implementieren Sie eine Objektmethode
Eine mögliche Lösung für Übung 7
package uebungen.uebung7;
public class Rectangle
{
private int a;
private int b;
public Rectangle()
{
this.a = 10;
this.b = 20;
}
public Rectangle(int a, int b)
{
this.a = a;
this.b = b;
}
public int area()
{
return this.a * this.b;
}
public int perimeter()
{
return 2 * (this.a + this.b);
}
public String toString()
{
String s = String.format("Rectangle : ( a=%2d, b=%2d, area=%3d, perimeter=%2d, diagonal=%6.3f )",
this.a, this.b, this.area(), this.perimeter(), this.diagonal());
return s;
}
public void scale(int factor)
{
double newArea = factor * this.area();
double aNew = Math.sqrt(factor * this.a * this.a);
double bNew = Math.sqrt(factor * this.b * this.b);
System.out.printf("newArea=%8.2f newA=%6.2f newB=%6.2f check (newA*newB)=%7.2f%n", newArea, aNew, bNew, (aNew*bNew));
}
public boolean sidesAreEqual(Rectangle r)
{
return (this.a==r.a && this.b==r.b) ||
(this.a==r.b && this.b==r.a);
}
public boolean areasAreEqual(Rectangle r)
{
return (this.area()==r.area());
}
public boolean perimetersAreEqual(Rectangle r)
{
return (this.perimeter()==r.perimeter());
}
public void print()
{
System.out.println(this.toString());
}
public void printComparison(Rectangle r)
{
String s = String.format("this %50s %n", this.toString());
s += String.format("the other %50s %n", r.toString());
if(this.sidesAreEqual(r))
{
s += String.format("sides are equal %n");
}
else
{
s += String.format("sides are not equal %n");
}
if(this.areasAreEqual(r))
{
s += String.format("areas are equal %n");
}
else
{
s += String.format("areas are not equal %n");
}
if(this.perimetersAreEqual(r))
{
s += String.format("perimeters are equal %n");
}
else
{
s += String.format("perimeters are not equal %n");
}
System.out.println(s);
}
public double diagonal()
{
return Math.sqrt(this.a * this.a + this.b * this.b);
}
/*
* Zusatz aus Uebungsvideo
*/
public Rectangle doubleSides()
{
int newA = this.a * 2;
int newB = this.b * 2;
Rectangle newRec = new Rectangle(newA, newB);
return newRec;
}
}
package uebungen.uebung7;
public class Testklasse
{
public static void main(String[] args)
{
// Objekte erzeugen
Rectangle r1 = new Rectangle();
Rectangle r2 = new Rectangle(12, 18);
Rectangle r3 = new Rectangle(40, 5);
Rectangle r4 = new Rectangle(20, 10);
Rectangle r5 = new Rectangle(11, 21);
System.out.printf("%n%n--------------- print()-Methode -----------------%n%n");
r1.print();
r2.print();
r3.print();
r4.print();
r5.print();
System.out.printf("%n%n---------- printComparison()-Methode ------------%n%n");
r1.printComparison(r2);
r1.printComparison(r3);
r1.printComparison(r4);
r1.printComparison(r5);
System.out.printf("%n%n--------------- scale()-Methode -----------------%n%n");
r1.scale(2);
r2.scale(2);
r3.scale(2);
r4.scale(2);
r5.scale(2);
r1.scale(10);
r2.scale(10);
r3.scale(10);
r4.scale(10);
r5.scale(10);
/*
* Zusatz aus Uebungsvideo
*/
System.out.printf("%n%n---------- doubleSides()-Methode ------------%n%n");
Rectangle r6 = r1.doubleSides(); // Referenz auf neues Objekt wird gespeichert
r1.print();
r6.print();
r2.print();
r2.doubleSides().print(); // Referenz auf neues Objekt wird NICHT gespeichert
r6.print();
}
}
Video zu Übung 7
Übung 8
- Erstellen Sie ein package
uebungen.uebung8
. -
Erstellen Sie in diesem package eine Klasse
Wohnung
mit- den privaten Objektvariablen
qm
vom Typint
, (entspricht der Größe der Wohnung in m^2)anzZimmer
vom Typint
,etage
vom Typint
undqmMiete
vom Typdouble
(entspricht dem Mietpreis pro m^2).
- einem parametrisierten Konstruktor Wohnung(int qm, int anzZimmer, int etage, double qmMiete). Die Werte der Parameter werden verwendet, um den Objektvariablen Werte zuzuweisen.
- Gettern für alle Objektvariablen (
getQm()
,getAnzZimmer()
,getEtage()
,getQmMiete()
) - einer Objektmethode
gesamtMiete()
, die die Gesamtmiete der Wohnung berechnet (qm
*qmMiete
) und diesendouble
-Wert zurückgibt. - einer Objektmethode
billiger(Wohnung w)
, die eintrue
zurückgibt, wenn die Gesamtmiete des aufrufenden Objektes kleiner ist als die Gesamtmiete vonw
;false
sonst. - einer Objektmethode
teurer(Wohnung w)
, die eintrue
zurückgibt, wenn die Gesamtmiete des aufrufenden Objektes größer ist als die Gesamtmiete vonw
;false
sonst. -
einer Objektmethode
toString()
die Details der Wohnung in folgender Form (ab inkl. 1. Etage aufwärts) alsString
zurückgibt (Beispielwerte):Achtung! Sollte sich die Wohnung in der 0.Etage befinden, geben Sie die Details bitte wie folgt zurück (Beispielwerte):2-Zimmer Wohnung mit 40 qm in der 4. Etage. Monatliche Miete: 360.00 Euro
1-Zimmer Wohnung mit 60 qm im Erdgeschoss. Monatliche Miete: 750.00 Euro`
-
und einer Objektmethode
print()
, die den vontoString()
zurückgegebenenString
auf der Konsole ausgibt
- den privaten Objektvariablen
-
Erstellen Sie im gleichen package eine Klasse
Testklasse
mitmain()
-Methode. Geben Sie in dermain()
-Methode Folgendes ein:und führen Sie dieSystem.out.printf("%n%n--------------------- Test Wohnung -------------------------%n%n"); Wohnung w1 = new Wohnung(70, 3, 4, 12.50); Wohnung w2 = new Wohnung(40, 1, 0, 9.50); Wohnung w3 = new Wohnung(90, 4, 2, 11.10); Wohnung w4 = new Wohnung(60, 2, 0, 9.00); w1.print(); w2.print(); w3.print(); w4.print();
Testklasse
aus. Es sollten folgende zusätzliche Ausgaben erzeugt werden:--------------------- Test Wohnung ------------------------- 3-Zimmer Wohnung mit 70qm in der 4. Etage. Monatliche Miete: 875,00 Euro 1-Zimmer Wohnung mit 40qm im Erdgeschoss. Monatliche Miete: 380,00 Euro 4-Zimmer Wohnung mit 90qm in der 2. Etage. Monatliche Miete: 999,00 Euro 2-Zimmer Wohnung mit 60qm im Erdgeschoss. Monatliche Miete: 540,00 Euro
-
Erstellen Sie im gleichen package eine Klasse
Dachgeschosswohnung
. Diese erbt vonWohnung
.- Implementieren Sie einen parametrisierten Konstruktor
Dachgeschosswohnung(int qm, int anzZimmer, double qmMiete)
. Bei Aufruf des Konstruktors werden die entsprechenden Objektvariablen mit den Parameterwerten initialisiert. Die Objektvariableetage
bekommt stets den Wert5
. - Überschreiben Sie die Methode
toString()
, so dass eine Zeichenkette der Form (Beispielwerte)zurückgegeben wird.4-Zimmer DG-Wohnung mit 100 qm in der 5. Etage. Monatliche Miete: 1250.00 Euro
- Implementieren Sie einen parametrisierten Konstruktor
-
Fügen Sie in der
main()
-Methode derTestklasse
folgende Anweisungen hinzu:und führen Sie dieSystem.out.printf("%n%n--------------- Test Dachgeschosswohnung -------------------%n%n"); Dachgeschosswohnung dg1 = new Dachgeschosswohnung(70, 3, 15.50); Dachgeschosswohnung dg2 = new Dachgeschosswohnung(100, 4, 17.25); dg1.print(); dg2.print();
Testklasse
aus. Es sollten folgende zusätzliche Ausgaben erzeugt werden:--------------- Test Dachgeschosswohnung ------------------- 3-Zimmer DG-Wohnung mit 70qm in der 5. Etage. Monatliche Miete: 1085,00 Euro 4-Zimmer DG-Wohnung mit 100qm in der 5. Etage. Monatliche Miete: 1725,00 Euro
-
Erstellen Sie im gleichen package eine Klasse
Haus
.- Objektvariable ist
wohnungen
vom TypWohnung[]
und nur in der Klasse sichtbar. -
Implementieren Sie eine Objektmethode
neueWohnung()
. Diese Methode gibt ein Objekt vom TypWohnung
zurück. In dieser Methode wird zunächst einRandom
-Objekt erzeugt. Mithilfe diesesRandom
-Objektes und der ObjektmethodenextInt(int bound)
der KlasseRandom
sollen zunächst nacheinander folgende Werte zufällig erzeugt werden:- Ein Wert für eine Quadratmeteranzahl
qm
aus dem Wertebereich[20, 40, 60, 80, 100]
( → also zufällig eine dieser 5 Zahlen), - Ein Wert für die Anzahl der Zimmer
anzZimmer
aus dem Wertebereich[1, 2, 3, 4, 5]
( → also zufällig eine dieser 5 Zahlen), - Ein Wert für die Etage
etage
aus dem Wertebereich[0, 1, 2, 3, 4, 5]
( → also zufällig eine dieser 6 Zahlen), - Ein Wert für den Mietpreis pro Quadratmeter
qmMiete
aus dem Wertebereich[8.0, 8.5, 9.0, 9.5, 10.0, 10.5, 11.0, 11.5, 12.0, 12.5]
( → also zufällig eine dieser 10 Zahlen – Achtung hierdouble
, Sie können aber trotzdemnextInt(int bound)
verwenden, müssen dann aber geeignet multiplizieren und addieren). Erzeugen Sie mit diesen Werten ein neuesWohnung
-Objekt und geben Sie dieses Objekt zurück.
- Ein Wert für eine Quadratmeteranzahl
-
Implementieren Sie einen parametrisierten Konstruktor
Haus(int anzWohnungen)
. Darin wird daswohnungen
-Array erzeugt. Die Länge vonwohnungen
entspricht dem Wert vonanzWohnungen
. Befüllen Sie daswohnungen
-Array vollständig mit Objekten vom TypWohnungen
. Rufen Sie dazu für jedes Element deswohnungen
-Arrays die ObjektmethodeneueWohnung()
auf.
Tipp : Jedes Element deswohnungen
-Arrays ist nach dem Befüllen mit Objekten vom TypWohnung
eine Referenzvariable auf einWohnung
-Objekt, d.h. z.B. istthis.wohnungen[0]
vom TypWohnung
und zeigt auf einWohnung
-Objekt. Die folgende Abbildung verdeutlicht das für den Fall, dass daswohnungen
-Array die Länge10
hat: -
Implementieren Sie eine Objektmethode
print()
. Bei Aufruf der Methode soll daswohnungen
-Array wie folgt ausgegeben werden (Beispielwerte für Array-Länge5
:)Das Haus besteht aus : 5-Zimmer Wohnung mit 80qm im Erdgeschoss. Monatliche Miete: 1000,00 Euro 4-Zimmer Wohnung mit 60qm in der 5. Etage. Monatliche Miete: 480,00 Euro 2-Zimmer Wohnung mit 80qm in der 5. Etage. Monatliche Miete: 880,00 Euro 5-Zimmer Wohnung mit 100qm in der 2. Etage. Monatliche Miete: 1100,00 Euro 3-Zimmer Wohnung mit 80qm im Erdgeschoss. Monatliche Miete: 920,00 Euro
- Objektvariable ist
-
Fügen Sie in der
main()
-Methode derTestklasse
folgende Anweisungen hinzu:und führen Sie dieSystem.out.printf("%n%n---------------------- Test Haus ---------------------------%n%n"); Haus h1 = new Haus(10); h1.print();
Testklasse
aus. Es sollten folgende zusätzliche Ausgaben erzeugt werden (Zufallswerte!):---------------------- Test Haus --------------------------- Das Haus besteht aus : 1-Zimmer Wohnung mit 80qm in der 4. Etage. Monatliche Miete: 840,00 Euro 3-Zimmer Wohnung mit 60qm in der 3. Etage. Monatliche Miete: 540,00 Euro 4-Zimmer Wohnung mit 80qm in der 3. Etage. Monatliche Miete: 1000,00 Euro 5-Zimmer Wohnung mit 60qm in der 3. Etage. Monatliche Miete: 540,00 Euro 2-Zimmer Wohnung mit 60qm im Erdgeschoss. Monatliche Miete: 510,00 Euro 3-Zimmer Wohnung mit 60qm in der 4. Etage. Monatliche Miete: 600,00 Euro 4-Zimmer Wohnung mit 20qm in der 3. Etage. Monatliche Miete: 250,00 Euro 4-Zimmer Wohnung mit 100qm in der 5. Etage. Monatliche Miete: 850,00 Euro 5-Zimmer Wohnung mit 20qm in der 2. Etage. Monatliche Miete: 160,00 Euro 2-Zimmer Wohnung mit 40qm in der 2. Etage. Monatliche Miete: 400,00 Euro
-
Zusatz: Erweitern Sie die Klasse
Haus
um folgende Objektmethoden:- eine Objektmethode
wohnungenInEtage(int etage)
. Diese Methode gibt einWohnung[]
-Array zurück. Das zurückgegebeneWohnung[]
-Array soll alle Wohnungen aus demwohnungen
-Array enthalten, die in der Etage liegen, die der Methode als Parameter übergeben wird (etage
). Befindet sich keine Wohnung in der als Parameter übergeben Etage, so wird einWohnung[]
-Array der Länge0
zurückgegeben. - eine Objektmethode
print(Wohnung[] warr)
. Diese Methode gibt das als Parameter übergebenewarr
-Array auf der Konsole aus, in der Form (Bsp.:):2-Zimmer Wohnung mit 100 qm in der 2. Etage. Monatliche Miete: 1250.00 Euro 5-Zimmer Wohnung mit 100 qm in der 2. Etage. Monatliche Miete: 1000.00 Euro
-
Testen der beiden Methoden in
main()
:sollte folgende Ausgbabe erzeugen (Zufallswerte):System.out.printf("%n%n----- Test wohnungenInEtage() und print(Wohnung[]) ---------%n%n"); for(int etage=0; etage<6; etage++) { System.out.println("Etage " + etage + " ---------------------------------------"); h1.print(h1.wohnungenInEtage(etage)); System.out.println(); }
----- Test wohnungenInEtage() und print(Wohnung[]) --------- Etage 0 --------------------------------------- 2-Zimmer Wohnung mit 60qm im Erdgeschoss. Monatliche Miete: 510,00 Euro Etage 1 --------------------------------------- Etage 2 --------------------------------------- 5-Zimmer Wohnung mit 20qm in der 2. Etage. Monatliche Miete: 160,00 Euro 2-Zimmer Wohnung mit 40qm in der 2. Etage. Monatliche Miete: 400,00 Euro Etage 3 --------------------------------------- 3-Zimmer Wohnung mit 60qm in der 3. Etage. Monatliche Miete: 540,00 Euro 4-Zimmer Wohnung mit 80qm in der 3. Etage. Monatliche Miete: 1000,00 Euro 5-Zimmer Wohnung mit 60qm in der 3. Etage. Monatliche Miete: 540,00 Euro 4-Zimmer Wohnung mit 20qm in der 3. Etage. Monatliche Miete: 250,00 Euro Etage 4 --------------------------------------- 1-Zimmer Wohnung mit 80qm in der 4. Etage. Monatliche Miete: 840,00 Euro 3-Zimmer Wohnung mit 60qm in der 4. Etage. Monatliche Miete: 600,00 Euro Etage 5 --------------------------------------- 4-Zimmer Wohnung mit 100qm in der 5. Etage. Monatliche Miete: 850,00 Euro
-
eine Objektmethode
teuersteWohnung()
. Diese Methode gibt die Wohnung aus demwohnungen
-Array zurück, die die höchste Gesamtmiete von allen Wohnungen aus demwohnungen
-Array hat. -
Testen der Methode in
main()
:sollte folgende Ausgbabe erzeugen (Zufallswerte):System.out.printf("%n%n--------------- Test teuersteWohnung() ---------------------%n%n"); Wohnung teuerste = h1.teuersteWohnung(); teuerste.print();
--------------- Test teuersteWohnung() --------------------- 4-Zimmer Wohnung mit 80qm in der 3. Etage. Monatliche Miete: 1000,00 Euro
-
eine Objektmethode
gesamtMieteHaus()
. Diese Methode gibt die Summe der Mieten aller Wohnungen imwohnungen
-Array alsdouble
zurück. -
Testen der Methode in
main()
:sollte folgende Ausgbabe erzeugen (Zufallswerte):System.out.printf("%n%n---------------- Test gesamtMieteHaus() --------------------%n%n"); System.out.printf("Die Gesamtmiete fuer das Haus betraegt %.2f Euro.%n", h1.gesamtMieteHaus());
---------------- Test gesamtMieteHaus() -------------------- Die Gesamtmiete fuer das Haus betraegt 5690,00 Euro.
-
eine Objektmethode
sortieren()
. Diese Methode sortiert daswohnungen
-Array nach Gesamtmieten aufsteigend (beginnend mit der billigsten Wohnung und endend mit der teuersten). - Testen der Methode in
main()
:sollte folgende Ausgbabe erzeugen (Zufallswerte):System.out.printf("%n%n------------------- Test sortieren() -----------------------%n%n"); h1.sortieren(); h1.print();
------------------- Test sortieren() ----------------------- Das Haus besteht aus : 5-Zimmer Wohnung mit 20qm in der 2. Etage. Monatliche Miete: 160,00 Euro 4-Zimmer Wohnung mit 20qm in der 3. Etage. Monatliche Miete: 250,00 Euro 2-Zimmer Wohnung mit 40qm in der 2. Etage. Monatliche Miete: 400,00 Euro 2-Zimmer Wohnung mit 60qm im Erdgeschoss. Monatliche Miete: 510,00 Euro 3-Zimmer Wohnung mit 60qm in der 3. Etage. Monatliche Miete: 540,00 Euro 5-Zimmer Wohnung mit 60qm in der 3. Etage. Monatliche Miete: 540,00 Euro 3-Zimmer Wohnung mit 60qm in der 4. Etage. Monatliche Miete: 600,00 Euro 1-Zimmer Wohnung mit 80qm in der 4. Etage. Monatliche Miete: 840,00 Euro 4-Zimmer Wohnung mit 100qm in der 5. Etage. Monatliche Miete: 850,00 Euro 4-Zimmer Wohnung mit 80qm in der 3. Etage. Monatliche Miete: 1000,00 Euro
- eine Objektmethode
Eine mögliche Lösung für Übung 8
package uebungen.uebung8;
public class Wohnung
{
private int qm;
private int anzZimmer;
private int etage;
private double qmMiete;
public Wohnung(int qm, int anzZimmer, int etage, double qmMiete)
{
this.qm = qm;
this.anzZimmer = anzZimmer;
this.etage = etage;
this.qmMiete = qmMiete;
}
public int getQm()
{
return this.qm;
}
public int getAnzZimmer()
{
return this.anzZimmer;
}
public int getEtage()
{
return this.etage;
}
public double getQmMiete()
{
return this.qmMiete;
}
public double gesamtMiete()
{
return this.qm * this.qmMiete;
}
public boolean billiger(Wohnung w)
{
return this.gesamtMiete() < w.gesamtMiete();
}
public boolean teurer(Wohnung w)
{
return this.gesamtMiete() > w.gesamtMiete();
}
public String toString()
{
String s = "";
if(this.etage == 0)
{
s = String.format("%d-Zimmer Wohnung mit %d qm im Erdgeschoss. Monatliche Miete: %.2f Euro",
this.anzZimmer, this.qm, this.gesamtMiete() );
}
else
{
s = String.format("%d-Zimmer Wohnung mit %d qm in der %d. Etage. Monatliche Miete: %.2f Euro",
this.anzZimmer, this.qm, this.etage, this.gesamtMiete() );
}
return s;
}
public void print()
{
System.out.println(this.toString());
}
}
package uebungen.uebung8;
public class Dachgeschosswohnung extends Wohnung
{
// alle Objektvariablen von Wohnung geerbt
// qm, anzZimmer, etage, qmMiete
// alle Objektmethoden von Wohnung geerbt
public Dachgeschosswohnung(int qm, int anzZimmer, double qmMiete)
{
super(qm, anzZimmer, 5, qmMiete); // Konstruktor Wohnung
}
@Override
public String toString()
{
String s= "";
s = String.format("%d-Zimmer Wohnung mit %d qm in der %d. Etage. Monatliche Miete: %.2f Euro",
this.getAnzZimmer(), this.getQm(), this.getEtage(), this.gesamtMiete() );
return s;
}
}
package uebungen.uebung8;
import java.util.Random;
public class Haus
{
private Wohnung[] wohnungen;
public Wohnung neueWohnung()
{
Random r = new Random();
int qm = r.nextInt(5) * 20 + 20;
int anzZimmer = r.nextInt(5) + 1;
int etage = r.nextInt(6);
double qmMiete = r.nextInt(10) * 0.5 + 8.0;
return new Wohnung(qm, anzZimmer, etage, qmMiete);
}
public Haus(int anzWohnungen)
{
this.wohnungen = new Wohnung[anzWohnungen];
for (int index = 0; index < this.wohnungen.length; index++)
{
this.wohnungen[index] = this.neueWohnung();
}
}
public void print()
{
System.out.println("Das Haus besteht aus :");
for (int index = 0; index < this.wohnungen.length; index++)
{
this.wohnungen[index].print(); // print()-Methode von Wohnung
}
}
public Wohnung[] wohnungenInEtage(int etage)
{
int anzWohnungenInEtage = 0;
for (int index = 0; index < this.wohnungen.length; index++)
{
if(this.wohnungen[index].getEtage()==etage)
{
anzWohnungenInEtage++;
}
}
Wohnung[] wohnungenInEtage = new Wohnung[anzWohnungenInEtage];
int indexWIE = 0;
for (int index = 0; index < this.wohnungen.length; index++)
{
if(this.wohnungen[index].getEtage()==etage)
{
wohnungenInEtage[indexWIE] = this.wohnungen[index];
indexWIE++;
}
}
return wohnungenInEtage;
}
public void print(Wohnung[] warr)
{
for (int index = 0; index < warr.length; index++)
{
warr[index].print(); // print()-Methode von Wohnung
}
}
public Wohnung teuersteWohnung()
{
int indexMax = 0;
for (int index = 0; index < this.wohnungen.length; index++)
{
if(this.wohnungen[index].teurer(this.wohnungen[indexMax]))
{
indexMax = index;
}
}
return this.wohnungen[indexMax];
}
public double gesamtMieteHaus()
{
double gesamtMieteHaus = 0.0;
for (int index = 0; index < this.wohnungen.length; index++)
{
gesamtMieteHaus = gesamtMieteHaus + this.wohnungen[index].gesamtMiete();
}
return gesamtMieteHaus;
}
public void sortieren()
{
for(int bubble = 1; bubble < this.wohnungen.length; bubble++)
{
for(int index = 0; index < this.wohnungen.length - bubble; index++)
{
if(this.wohnungen[index].teurer(this.wohnungen[index + 1]))
{
Wohnung tmp = this.wohnungen[index];
this.wohnungen[index] = this.wohnungen[index + 1];
this.wohnungen[index + 1] = tmp;
}
}
}
}
}
package uebungen.uebung8;
public class Testklasse
{
public static void main(String[] args)
{
System.out.printf("%n%n--------------------- Test Wohnung -------------------------%n%n");
Wohnung w1 = new Wohnung(70, 3, 4, 12.50);
Wohnung w2 = new Wohnung(40, 1, 0, 9.50);
Wohnung w3 = new Wohnung(90, 4, 2, 11.10);
Wohnung w4 = new Wohnung(60, 2, 0, 9.00);
w1.print();
w2.print();
w3.print();
w4.print();
System.out.printf("%n%n--------------- Test Dachgeschosswohnung -------------------%n%n");
Dachgeschosswohnung dg1 = new Dachgeschosswohnung(70, 3, 15.50);
Dachgeschosswohnung dg2 = new Dachgeschosswohnung(100, 4, 17.25);
dg1.print();
dg2.print();
System.out.printf("%n%n---------------------- Test Haus ---------------------------%n%n");
Haus h1 = new Haus(10);
h1.print();
System.out.printf("%n%n----- Test wohnungenInEtage() und print(Wohnung[]) ---------%n%n");
for(int etage=0; etage<6; etage++)
{
System.out.println("Etage " + etage + " ---------------------------------------");
h1.print(h1.wohnungenInEtage(etage));
System.out.println();
}
System.out.printf("%n%n--------------- Test teuersteWohnung() ---------------------%n%n");
Wohnung teuerste = h1.teuersteWohnung();
teuerste.print();
System.out.printf("%n%n---------------- Test gesamtMieteHaus() --------------------%n%n");
System.out.printf("Die Gesamtmiete fuer das Haus betraegt %.2f Euro.%n", h1.gesamtMieteHaus());
System.out.printf("%n%n------------------- Test sortieren() -----------------------%n%n");
h1.sortieren();
h1.print();
}
}
Video zu Übung 8
Übung 9
- Erstellen Sie ein package
uebungen.uebung9
. -
Erstellen Sie in diesem package eine Klasse
Pizza
mit- den privaten Objektvariablen
name
vom TypString
undpreis
vom Typfloat
.
- einem parametrisierten Konstruktor
Pizza(String name, float preis)
. Die Werte der Parameter werden verwendet, um den Objektvariablen Werte zuzuweisen. - Gettern für die Objektvariablen (
getName()
,getPreis()
) - Überschreiben Sie die Objektmethode
toString()
, die Details der Pizza in folgender Form alsString
zurückgibt (Beispielwerte):Die Pizza Salami kostet 6.90 Euro.
- und einer Objektmethode
print()
, die den vontoString()
zurückgegebenenString
auf der Konsole ausgibt. - Überschreiben Sie die Objektmethode
equals(Object o)
. Diese Methode gibttrue
zurück, wenn der Namename
des aufrufenden Objektes gleich dem Namenname
des als Parameter übergebenen Objektes ist;false
sonst. Tipp : Die Gleichheit von zwei Stringss1
unds2
können Sie mithilfe vons1.equals(s2)
ermitteln. (hashCode()
muss nicht überschrieben werden).
- den privaten Objektvariablen
-
Erstellen Sie im gleichen package eine Klasse
Testklasse
mitmain()
-Methode. Geben Sie in dermain()
-Methode Folgendes ein:und führen Sie dieSystem.out.printf("%n%n------------------------- Test Pizza ---------------------------%n%n"); Pizza p1 = new Pizza("Salami", 6.9f); Pizza p2 = new Pizza("Margheritha", 5.9f); Pizza p3 = new Pizza("Tonno", 6.9f); Pizza p4 = new Pizza("Hawaii", 6.9f); Pizza p5 = new Pizza("Calzone", 7.9f); Pizza p6 = new Pizza("Salami", 6.9f); p1.print(); p2.print(); p3.print(); p4.print(); p5.print(); System.out.println("p1 gleich p2 ? : " + p1.equals(p2)); System.out.println("p1 gleich p1 ? : " + p1.equals(p1)); System.out.println("p1 gleich p6 ? : " + p1.equals(p6));
Testklasse
aus. Es sollten folgende zusätzliche Ausgaben erzeugt werden:------------------------- Test Pizza --------------------------- Die Pizza Salami kostet 6,90 Euro. Die Pizza Margheritha kostet 5,90 Euro. Die Pizza Tonno kostet 6,90 Euro. Die Pizza Hawaii kostet 6,90 Euro. Die Pizza Calzone kostet 7,90 Euro. p1 gleich p2 ? : false p1 gleich p1 ? : true p1 gleich p6 ? : true
-
Erstellen Sie im gleichen package eine Klasse
Pizzaverkauf
mit- den privaten Objektvariablen
pizza
vom TypPizza
undanzVerkaeufe
vom Typint
.
- einem parametrisierten Konstruktor
Pizzaverkauf(Pizza pizza)
. Mit dem Parameterwertpizza
wird die Objektvariablepizza
initialisiert. Der Wert der ObjektvariablenanzVerkaeufe
wird auf0
gesetzt. - einer Objektmethode
verkaufen()
. Darin wird der Wert der ObjektvariablenanzVerkaeufe
um1
erhöht. - Gettern für die Objektvariablen, also
getAnzVerkaeufe()
undgetPizza()
. - einer Objektmethode
umsatz()
. Diese Methode gibt eindouble
zurück. Der Wert berechnet sich aus der Anzahl der Verkäufe der Pizza (anzVerkaeufe
) mal dem Preis der Pizza. -
einer Objektmethode
toString()
die Details der Pizzaverkaeufe in folgender Form alsString
zurückgibt (Beispielwerte):Pizza Salami wurde 0 mal zum Preis von 6.90 Euro verkauft.
-
und einer Objektmethode
print()
, die den vontoString()
zurückgegebenenString
auf der Konsole ausgibt
- den privaten Objektvariablen
-
Fügen Sie in der
main()
-Methode derTestklasse
folgende Anweisungen hinzu:und führen Sie dieSystem.out.printf("%n%n--------------------- Test Pizzaverkauf ------------------------%n%n"); Pizzaverkauf pv1 = new Pizzaverkauf(p1); pv1.print(); pv1.verkaufen(); pv1.print();
Testklasse
aus. Es sollten folgende zusätzliche Ausgaben erzeugt werden:--------------------- Test Pizzaverkauf ------------------------ Pizza Salami wurde 0 mal zum Preis von 6,90 Euro verkauft. Pizza Salami wurde 1 mal zum Preis von 6,90 Euro verkauft.
-
Erstellen Sie im gleichen package eine Klasse
Speisekarte
mit- der privaten Objektvariablen
angebot
vom TypPizza[]
.
- einem parameterlosen Konstruktor
Speisekarte()
. In diesem Konstruktor wird fürangebot
einPizza
-Array der Länge0
erzeugt. -
einer Objektmethode
pizzaHinzufuegen(Pizza pizza)
. Diese Methode fügt die als Parameter übergebenepizza
dem angebot-Array hinzu.
Beachten Sie:- Um dem
angebot
-Array eine neue Pizza hinzuzufügen, muss die Länge des Arrays um 1 erhöht werden. - Kopieren Sie sich dazu das alte
angebot
-Array. - Erzeugen Sie dann ein neues
angebot
-Array, das um 1 länger ist als das alte. - Kopieren Sie das bisherige Angebot zurück in das neue
angebot
-Array. - Fügen Sie die neue Pizza (Parameter
pizza
) als letztes Element im neuenangebot
-Array hinzu.
- Um dem
-
einer Objektmethode
getLength()
. Diese Methode gibt die Länge desangebot
-Arrays zurück. - einer Objektmethode
pizzaIstImAngebot(Pizza pizza)
. Diese Methode gibt eintrue
zurück, wenn die als Parameter übergebenepizza
imangebot
-Array enthalten ist. Prüfen Sie die Gleichheit mithilfe derequals()
-Methode vonPizza
. -
einer Objektmethode
pizzaLoeschen(Pizza pizza)
. Diese Methode löscht die als Parameter übergebenepizza
aus demangebot
-Array (wenn Sie darin enthalten ist).
Beachten Sie:- Nach dem Löschen der Pizza aus dem
angebot
-Array soll dasangebot
-Array wieder um 1 kleiner sein als vorher (falls die zu löschende Pizza überhaupt imangebot
-Array enthalten war). - Kopieren Sie also das alte
angebot
-Array außer die zu löschende Pizza. - Ihre Kopie ist dann das neue
angebot
-Array.
- Nach dem Löschen der Pizza aus dem
-
einer Objektmethode
getPizzaAtIndex(int index)
. Diese Methode gibt die Pizza zurück, die imangebot
-Array beim Indexindex
eingetragen ist. Prüfen Sie, ob der übergebene Parameter ein gültiger Index aus demangebot
-Array ist. Wenn nicht, geben Sienull
zurück. -
Überschreiben Sie die Objektmethode
toString()
, die die Details der Speisekarte in folgender Form alsString
zurückgibt (Beispielwerte):====== Speisekarte ====== Salami 6,90 Euro Margheritha 5,90 Euro Tonno 6,90 Euro Hawaii 6,90 Euro Calzone 7,90 Euro
-
und einer Objektmethode
print()
, die den vontoString()
zurückgegebenenString
auf der Konsole ausgibt
- der privaten Objektvariablen
-
Fügen Sie in der
main()
-Methode derTestklasse
folgende Anweisungen hinzu:und führen Sie dieSystem.out.printf("%n%n--------------------- Test Speisekarte -------------------------%n%n"); Speisekarte s1 = new Speisekarte(); s1.pizzaHinzufuegen(p1); s1.pizzaHinzufuegen(p2); s1.pizzaHinzufuegen(p3); s1.pizzaHinzufuegen(p4); s1.pizzaHinzufuegen(p5); s1.print(); s1.pizzaLoeschen(p3); s1.print();
Testklasse
aus. Es sollten folgende zusätzliche Ausgaben erzeugt werden:--------------------- Test Speisekarte ------------------------- ====== Speisekarte ====== Salami 6,90 Euro Margheritha 5,90 Euro Tonno 6,90 Euro Hawaii 6,90 Euro Calzone 7,90 Euro ====== Speisekarte ====== Salami 6,90 Euro Margheritha 5,90 Euro Hawaii 6,90 Euro Calzone 7,90 Euro
-
Zusatz Erstellen Sie im gleichen package eine Klasse
Pizzaria
mit- der privaten Objektvariablen
verkaeufe
vom TypPizzaverkauf[]
.
-
einem parametrisierten Konstruktor
Pizzeria(Speisekarte karte)
. In diesem Konstruktor wird- das
verkaeufe
-Array erzeugt und hat die gleiche Länge wie dasangebot
-Array der Speisekartekarte
(siehegetLength()
-Methode ausSpeisekarte
). - jedes Element des
verkaeufe
-Arrays zeigt auf einPizzaverkauf
-Objekt. Erzeugen Sie allePizzaverkauf
-Objekte. Übergeben Sie demPizzaverkauf
-Konstruktor dazu die jeweiligenPizza
-Objekte aus der Speisekartekarte
.
- das
-
einer Objektmethode
bestellen()
. Diese Methode gibt einint
zurück. In dieser Methode soll zufällig ein Index aus demverkaeufe
-Array erzeugt werden. Nutzen Sie dazu die KlasseRandom
aus demjava.util
-Paket. Verwenden Sie die ObjektmethodenextInt(int bound)
der KlasseRandom
. Wenden SienextInt()
so an, dass auch tatsächlich ein gültiger Index desverkaeufe
-Arrays erzeugt wird. Geben Sie diesen zufällig erzeugten Index zurück (das Bestellen entspricht also dem Nennen einer Nummer aus der Speisekarte). - einer Objektmethode
verkaufen(int index)
. Durch den Aufruf der Methode wird die Pizza verkauft, die imverkaeufe
-Array am Indexindex
steht. Nutzen Sie für den Verkauf dieverkaufen()
-Methode der Klasse Pizzaverkauf. Überprüfen Sie, ob der als Parameter übergebene Wert fürindex
tatsächlich einem Index imverkaeufe
-Array entspricht. - einer Objektmethode
tagesVerkauf(int anzVerkaeufe)
. In dieser Methode wirdanzVerkaeufe
oft eine Pizza verkauft (verkaufen(int index)
). Welche Pizza verkauft wird (also welcherindex
), wird durch die Methodebestellen()
jeweils zufällig ermittelt. - einer Objektmethode
print()
. Diese Methode erzeugt folgende Ausgabe (Beispielwerte):Das heißt, es wird am Anfang der Zeile der Name der Pizza aus demSalami : *********************************** Margheritha : ************************************ Hawaii : ***************************************** Calzone : **************************************
verkaeufe
-Array ausgegeben und danach für die Anzahl der Verkäufe jeweils ein*
. - einer Objektmethode
meistverkauftePizza()
. Diese Methode gibt die Pizza aus demverkaeufe
-Array zurück, die am meisten verkauft wurde. - einer Objektmethode
gesamtEinnahmen()
. Diese Methode gibt die Summe aller Einnahmen alsdouble
zurück. Die Einnahmen ergeben sich aus der Summe der Umsätze aller Pizzen (Methodeumsatz()
vonPizzaverkauf
) aus demverkaeufe
-Array.
- der privaten Objektvariablen
-
Fügen Sie in der
main()
-Methode derTestklasse
folgende Anweisungen hinzu:und führen Sie dieSystem.out.printf("%n%n------------------------ Test Pizzaria -------------------------%n%n"); Pizzeria pz1 = new Pizzeria(s1); pz1.tagesVerkauf(150); pz1.print(); System.out.println(); System.out.print("Meistverkaufte Pizza : "); pz1.meistverkauftePizza().print(); System.out.printf("Die Gesamteinnahmen betragen %.2f Euro", pz1.gesamtEinnahmen());
Testklasse
aus. Es sollten folgende zusätzliche Ausgaben erzeugt werden (Zufallswerte):------------------------ Test Pizzaria ------------------------- Salami : ****************************** Margheritha : ******************************************* Hawaii : ******************************************* Calzone : ********************************** Meistverkaufte Pizza : Die Pizza Margheritha kostet 5,90 Euro. Die Gesamteinnahmen betragen 1026,00 Euro
Testklasse aus der Dienstag-Übung - Diskussion über insert() und delete()
public class Testklasse
{
public static int[] insert(int[] original, int element)
{
if(!contains(original, element))
{
int[] copy = new int[original.length + 1];
int indexOriginal = 0;
int indexCopy = 0;
// 1. alle Werte kopieren, die kleiner sind als element
while(indexOriginal < original.length && original[indexOriginal] < element)
{
copy[indexCopy] = original[indexOriginal];
indexCopy++;
indexOriginal++;
}
// 2. element hinzufuegen
copy[indexCopy] = element;
indexCopy++;
// 3. Rest kopieren
while(indexOriginal < original.length)
{
copy[indexCopy] = original[indexOriginal];
indexCopy++;
indexOriginal++;
}
return copy;
}
else
{
return original;
}
}
public static int[] delete(int[] original, int element)
{
if(contains(original, element))
{
int[] copy = new int[original.length - 1];
int indexOriginal = 0;
int indexCopy = 0;
// 1. alle Werte kopieren, die kleiner sind als element
while(original[indexOriginal] < element)
{
copy[indexCopy] = original[indexOriginal];
indexCopy++;
indexOriginal++;
}
// 2. element wird nicht kopiert
indexOriginal++;
// ab jetzt: indexCopy ist um 1 kleiner als indexOriginal
// 3. rest kopieren (alles groesser als element)
while(indexCopy < copy.length)
{
copy[indexCopy] = original[indexOriginal];
indexCopy++;
indexOriginal++;
}
return copy;
}
else
{
return original;
}
}
public static boolean contains(int[] ia, int element)
{
for (int index = 0; index < ia.length; index++)
{
if(ia[index] == element)
{
return true;
}
}
return false;
}
public static void print(int[] ia)
{
for (int i = 0; i < ia.length; i++)
{
System.out.print(ia[i] + " ");
}
System.out.println();
}
public static void main(String[] args)
{
int[] ia = {3, 6, 9};
int[] ia1 = insert(ia, 7);
print(ia1);
ia1 = insert(ia1, 4);
print(ia1);
ia1 = insert(ia1, 10);
print(ia1);
ia1 = insert(ia1, 1);
print(ia1);
ia1 = insert(ia1, 1);
print(ia1);
ia1 = delete(ia1, 7);
print(ia1);
ia1 = delete(ia1, 1);
print(ia1);
ia1 = delete(ia1, 10);
print(ia1);
ia1 = delete(ia1, 10);
print(ia1);
String s1 = "Hallo";
String s2 = "Ballo";
String s3 = "Hallo";
String s4 = "hallo";
System.out.println(s1.equals(s2));
System.out.println(s1.equals(s3));
System.out.println(s1.compareTo(s2));
System.out.println(s1.compareTo(s3));
System.out.println(s2.compareTo(s1));
System.out.println(s4.compareTo(s3));
char c1 = s3.charAt(0);
System.out.println(c1);
char c2 = s4.charAt(0);
System.out.println(c2);
int diff = c2 - c1;
System.out.println(diff);
}
}
Eine mögliche Lösung für Übung 9
package uebungen.uebung9;
public class Pizza
{
private String name;
private float preis;
public Pizza(String name, float preis)
{
this.name = name;
this.preis = preis;
}
public String getName()
{
return this.name;
}
public float getPreis()
{
return this.preis;
}
@Override
public String toString()
{
return String.format("Die Pizza %s kostet %.2f Euro.", this.name, this.preis);
}
public void print()
{
System.out.println(this.toString());
}
@Override
public boolean equals(Object o)
{
if(o == null) return false;
if(this == o) return true;
if(this.getClass() != o.getClass()) return false;
Pizza po = (Pizza)o;
return (this.name.equals(po.name));
}
}
package uebungen.uebung9;
public class Pizzaverkauf
{
private Pizza pizza;
private int anzVerkaeufe;
public Pizzaverkauf(Pizza pizza)
{
this.pizza = pizza;
this.anzVerkaeufe = 0;
}
public void verkaufen()
{
this.anzVerkaeufe++;
}
public Pizza getPizza()
{
return this.pizza;
}
public int getAnzVerkaeufe()
{
return this.anzVerkaeufe;
}
public double umsatz()
{
return this.anzVerkaeufe * this.pizza.getPreis();
}
@Override
public String toString()
{
return String.format("Pizza %s wurde %d mal zum Preis von %.2f Euro verkauft.",
this.pizza.getName(), this.anzVerkaeufe, this.pizza.getPreis());
}
public void print()
{
System.out.println(this.toString());
}
}
package uebungen.uebung9;
public class Speisekarte
{
private Pizza[] angebot;
public Speisekarte()
{
this.angebot = new Pizza[0];
}
public int getLength()
{
return this.angebot.length;
}
public void pizzaHinzufuegen(Pizza pizza)
{
Pizza[] kopie = new Pizza[this.angebot.length + 1];
for (int index = 0; index < this.angebot.length; index++)
{
kopie[index] = this.angebot[index];
}
kopie[kopie.length - 1] = pizza;
this.angebot = kopie;
}
public boolean pizzaIstImAngebot(Pizza pizza)
{
for (int index = 0; index < this.angebot.length; index++)
{
if(this.angebot[index].equals(pizza))
{
return true;
}
}
return false;
// System.out.println("dead code");
}
public void pizzaLoeschen(Pizza pizza)
{
if(this.pizzaIstImAngebot(pizza))
{
Pizza[] kopie = new Pizza[this.angebot.length - 1];
int indexKopie = 0;
for (int indexAngebot = 0; indexAngebot < this.angebot.length; indexAngebot++)
{
if(!this.angebot[indexAngebot].equals(pizza))
{
kopie[indexKopie] = this.angebot[indexAngebot];
indexKopie++;
}
}
this.angebot = kopie;
}
}
public Pizza getPizzaAtIndex(int index)
{
if(index>=0 && index<this.angebot.length)
{
return this.angebot[index];
}
else
{
return null;
}
}
@Override
public String toString()
{
String s = String.format("====== Speisekarte ======%n");
for (int index = 0; index < this.angebot.length; index++)
{
s = s + String.format("%-15s %.2f Euro %n",
this.angebot[index].getName(), this.angebot[index].getPreis());
}
return s;
}
public void print()
{
System.out.println(this.toString());
}
}
package uebungen.uebung9;
import java.util.Random;
public class Pizzeria
{
private Pizzaverkauf[] verkaeufe;
public Pizzeria(Speisekarte karte)
{
this.verkaeufe = new Pizzaverkauf[karte.getLength()];
for (int index = 0; index < this.verkaeufe.length; index++)
{
this.verkaeufe[index] = new Pizzaverkauf(karte.getPizzaAtIndex(index));
}
}
public int bestellen()
{
Random r = new Random();
int index = r.nextInt(this.verkaeufe.length);
return index;
}
public void verkaufen(int index)
{
if(index>=0 && index<this.verkaeufe.length)
{
this.verkaeufe[index].verkaufen();
}
}
public void tagesVerkauf(int anzVerkaeufe)
{
for(int i=0; i<anzVerkaeufe; i++)
{
int index = this.bestellen();
this.verkaufen(index);
}
}
public void print()
{
for (int index = 0; index < this.verkaeufe.length; index++)
{
Pizza p = this.verkaeufe[index].getPizza();
int anzVerkaeufe = this.verkaeufe[index].getAnzVerkaeufe();
String s = String.format("%-13s : ", p.getName());
for(int stars = 0; stars < anzVerkaeufe; stars++)
{
s = s + "*";
}
System.out.println(s);
}
}
public Pizza meistverkauftePizza()
{
int maxIndex = 0;
for (int index = 0; index < this.verkaeufe.length; index++)
{
if(this.verkaeufe[index].getAnzVerkaeufe() > this.verkaeufe[maxIndex].getAnzVerkaeufe())
{
maxIndex = index;
}
}
return this.verkaeufe[maxIndex].getPizza();
}
public double gesamtEinnahmen()
{
double gesamtEinnahmen = 0.0;
for (int index = 0; index < this.verkaeufe.length; index++)
{
gesamtEinnahmen += this.verkaeufe[index].umsatz();
}
return gesamtEinnahmen;
}
}
package uebungen.uebung9;
public class Testklasse
{
public static void main(String[] args)
{
System.out.printf("%n%n------------------------- Test Pizza ---------------------------%n%n");
Pizza p1 = new Pizza("Salami", 6.9f);
Pizza p2 = new Pizza("Margheritha", 5.9f);
Pizza p3 = new Pizza("Tonno", 6.9f);
Pizza p4 = new Pizza("Hawaii", 6.9f);
Pizza p5 = new Pizza("Calzone", 7.9f);
Pizza p6 = new Pizza("Salami", 6.9f);
p1.print();
p2.print();
p3.print();
p4.print();
p5.print();
System.out.println("p1 gleich p2 ? : " + p1.equals(p2));
System.out.println("p1 gleich p1 ? : " + p1.equals(p1));
System.out.println("p1 gleich p6 ? : " + p1.equals(p6));
System.out.printf("%n%n--------------------- Test Pizzaverkauf ------------------------%n%n");
Pizzaverkauf pv1 = new Pizzaverkauf(p1);
pv1.print();
pv1.verkaufen();
pv1.print();
System.out.printf("%n%n--------------------- Test Speisekarte -------------------------%n%n");
Speisekarte s1 = new Speisekarte();
s1.pizzaHinzufuegen(p1);
s1.pizzaHinzufuegen(p2);
s1.pizzaHinzufuegen(p3);
s1.pizzaHinzufuegen(p4);
s1.pizzaHinzufuegen(p5);
s1.print();
s1.pizzaLoeschen(p3);
s1.print();
System.out.printf("%n%n------------------------ Test Pizzaria -------------------------%n%n");
Pizzeria pz1 = new Pizzeria(s1);
pz1.tagesVerkauf(150);
pz1.print();
System.out.println();
System.out.print("Meistverkaufte Pizza : ");
pz1.meistverkauftePizza().print();
System.out.printf("Die Gesamteinnahmen betragen %.2f Euro", pz1.gesamtEinnahmen());
}
}
Video zu Übung 9
Übung 10
- Erstellen Sie ein package
uebungen.uebung10
. -
Erstellen Sie in diesem package eine Klasse
Lottery
mit- der privaten Objektvariablen
drawingResults
vom Typint[]
. -
Information: Lottery steht für eine Lotterie, bei der aus 9 Zahlen (1..9) 5 Zahlen zufällig gelost werden (5 aus 9). Das Array
drawingResults
dient zum Speichern der gezogenen 5 Zahlen. -
Schreiben Sie für die Klasse
Lottery
einen parameterlosen Konstruktor. In diesem Konstruktor wird das ArraydrawingResults
mit der Länge 5 erzeugt. - Schreiben Sie eine Objektmethode
contains(int number)
. Diese Methode gibt eintrue
zurück, wennnumber
indrawingResults
enthalten ist undfalse
sonst. - Schreiben Sie eine Objektmethode
drawing()
. In dieser Methode werden die 5 Zufallszahlen gezogen (5 aus 9). Sie benötigen dafür ein Objekt der KlasseRandom
(Random
muss ausjava.util
importiert werden). „Ziehen“ Sie nun zufällig 5 Zufallszahlen aus dem Bereich1..9
(1 und 9 inklusive) und speichern Sie diese im ArraydrawingResults
.
Achtung: Die gleiche Zahl darf nicht doppelt gezogen (gespeichert) werden! D.h. die 5 im Array gespeicherten Zufallszahlen müssen sich voneinander unterscheiden! -
Schreiben Sie eine Objektmethode
sort()
. Diese Methode sortiert das ArraydrawingResults
aufsteigend (von klein nach groß). -
Überschreiben Sie die Objektmethode
toString()
, die dasdrawingResult
-Array alsString
in folgender Form zurückgibt (Beispielwerte für den Fall, dass1, 3, 5, 6, 7
gezogen wurden):( 1 - 3 - 5 6 7 - - )
- das
dawingResult
-Array wird zunächst sortiert - ist die Zahl im Array enthalten, wird sie als Wert angezeigt
- ist die Zahl nicht enthalten, wird ein
-
angezeigt - d.h. es werden immer die 5 gezogenen Zahlen ausgegeben und 4 Striche.
- das
-
Schreiben Sie eine Objektmethode
print()
, die den vontoString()
zurückgegebenenString
auf der Konsole ausgibt. - Überschreiben Sie die Objektmethode
equals(Object o)
. Diese Methode gibttrue
zurück, wenn wenn bei dem aufrufenden Objekt die gleichen Zahlen gezogen wurden, wie beio
. Sonstfalse
(hashCode()
muss nicht überschrieben werden).
Tipp: Implementieren Sie die Methode am einfachsten so, dass Sie die beidendrawingResult
-Arrays erst sortieren und dann die sortierten Arrays elementweise miteinander vergleichen.
- der privaten Objektvariablen
-
Erstellen Sie im gleichen package eine Klasse
Testklasse
mitmain()
-Methode.- Erzeugen Sie in der
main()
-Methode in einer Schleife10
Objekte der KlasseLottery
und rufen (auch in der Schleife) jeweils diedrawing()
und dieprint()
-Methode auf. Es entsteht folgende Ausgabe (Beispielwerte sind zufällig und unterscheiden sich!):( 1 - 3 - 5 6 7 - - ) ( 1 2 3 - 5 - 7 - - ) ( 1 - 3 - - 6 7 8 - ) ( - - 3 4 5 6 - - 9 ) ( 1 2 3 4 - - - - 9 ) ( 1 2 - 4 - 6 - 8 - ) ( - 2 3 - - - 7 8 9 ) ( 1 2 3 - - 6 - - 9 ) ( 1 - - 4 5 - 7 8 - ) ( - 2 3 - 5 - - 8 9 )
- Erzeugen Sie ein Objekt von
Lottery
und rufen für dieses Objekt diedrawing()
-Methode auf. Erzeugen Sie in einer Schleife so lange ein weiteres Objekt vonLottery
und rufen dafür diedrawing()
-Methode auf, bis die beiden Objekte die gleichen gezogenen Zahlen enthalten, d.h. lautequals()
-Methode gleich sind. Geben Sie dann beide Objekte mithilfe derprint()
-Methode aus. Es entsteht folgende Ausgabe (zufällige Beispielwerte):( 1 - 3 - - 6 - 8 9 ) ( 1 - 3 - - 6 - 8 9 )
- Erzeugen Sie in der
-
Erstellen Sie im gleichen package eine Klasse
LotteryYear
mit- der privaten Objektvariablen
lotteryYear
vom TypLottery[]
. (Das Array speichert alle 52 Lotto-Ziehungen eines Jahres.) -
Schreiben Sie einen parameterlosen Konstruktor
LotteryYear()
. Innerhalb des Konstruktors werden:- das Array erzeugt, auf das die Objektvariable
lotteryYear
referenziert. Das Array hat die Länge52
sowie 52
Lottery
-Objekte, für die jeweilsdrawing()
undsort()
aufgerufen werden. Mit diesen Objekten wird das Array befüllt.
- das Array erzeugt, auf das die Objektvariable
-
Schreiben Sie eine Objektmethode
nrOfNumber(int number)
. Diese Methode gibt einint
zurück. Diese Methode ermittelt, wie oft die Zahlnumber
im Jahr gezogen wurde, d.h. wie oftnumber
imlotteryYear
-Array vorkommt. Kommtnumber
gar nicht vor (nicht aus dem Bereich1..9
), dann wird0
zurückgegeben. -
Schreiben Sie eine Objektmethode
frequency()
. Diese Methode gibt einint
-Array der Länge9
zurück. In diesem Array wird für jede der Zahlen1
bis9
gespeichert, wie oft sie imlotteryArray
vorkommt, d.h. wie oft sie im Jahr gezogen wurde. Verwenden Sie für jede der Zahlen1
bis9
dienrOfNumber()
-Methode. (Frequency steht für die Häufigkeit des Vorkommens jeder einzelnen Zahl 1 bis 9 im Jahr.)
Beispiel-Belegung des zu erzeugenden Arrays (Werte sind zufällig erzeugt): -
Schreiben Sie eine Objektmethode
printFrequencyString()
. Erzeugen Sie innerhalb dieser Methode mithilfe derfrequency()
-Methode das entsprechende Array und geben es in der folgenden Form auf die Konsole aus (Beispielwerte zufällig erzeugt):Es werden also alle Einträge des Arrays durch Komma getrennt ausgegeben und am Ende (nach „→“ ) noch die Summe aller Einträge ([ 28, 34, 27, 26, 35, 24, 31, 27, 28 ] --> 260
260
). -
Schreiben Sie eine Objektmethode
printFrequencyDiagram()
. Erzeugen Sie innerhalb dieser Methode mithilfe derfrequency()
-Methode das entsprechende Array und geben es in der folgenden Form aus (Beispielwerte zufällig erzeugt):Es werden also für jede Zahl so viele Sterne ausgegeben, wie ihr entsprechender Eintrag im Array.1 : **************************** 2 : ********************************** 3 : *************************** 4 : ************************** 5 : *********************************** 6 : ************************ 7 : ******************************* 8 : *************************** 9 : ****************************
-
Schreiben Sie eine Objektmethode
containsEquals()
. Diese Methode gibt eintrue
zurück, wenn imlotteryArray
zweiLottery
-Objekte die gleichen Zahlen gezogen haben, d.h. lautequals()
-Methode gleich sind;false
sonst. -
Überschreiben Sie die
toString()
-Methode, so dass alle Ziehungen des Jahres (daslotterYear
-Array) in folgender Form ausgegeben werden (Beispielwerte zufällig erzeugt):Es kommt also zunächst die Woche (fortlaufend von1 : ( 1 - - 4 - - 7 8 9 ) 2 : ( 1 - - 4 - 6 7 8 - ) 3 : ( 1 - 3 4 5 6 - - - ) 4 : ( - 2 3 4 5 - - 8 - ) 5 : ( 1 2 - - 5 - - 8 9 ) 6 : ( 1 - 3 4 - 6 7 - - ) 7 : ( - - 3 4 5 6 7 - - ) 8 : ( 1 - - - - 6 7 8 9 ) 9 : ( - 2 3 - 5 - - 8 9 ) 10 : ( 1 2 - - - 6 7 - 9 ) 11 : ( - - - 4 5 - 7 8 9 ) 12 : ( 1 2 3 - - - 7 8 - ) 13 : ( - - 3 4 - 6 - 8 9 ) 14 : ( - 2 3 4 5 - - 8 - ) 15 : ( - - 3 4 5 - 7 8 - ) 16 : ( - 2 3 - - - 7 8 9 ) 17 : ( - 2 - 4 5 - 7 - 9 ) 18 : ( - - - - 5 6 7 8 9 ) 19 : ( 1 - - 4 5 - 7 8 - ) 20 : ( - 2 3 - 5 - 7 - 9 ) 21 : ( 1 2 - - - 6 7 8 - ) 22 : ( 1 - 3 4 - 6 - 8 - ) 23 : ( - - 3 4 5 - 7 8 - ) 24 : ( - 2 - 4 5 6 - 8 - ) 25 : ( 1 - 3 4 - 6 - 8 - ) 26 : ( 1 - 3 - 5 6 - 8 - ) 27 : ( 1 2 - 4 - 6 - 8 - ) 28 : ( 1 - - 4 - 6 - 8 9 ) 29 : ( 1 - - 4 - - 7 8 9 ) 30 : ( 1 - - - 5 - 7 8 9 ) 31 : ( - 2 3 - 5 6 7 - - ) 32 : ( - 2 3 4 - - 7 8 - ) 33 : ( - - 3 4 5 - 7 8 - ) 34 : ( 1 2 - - 5 - 7 8 - ) 35 : ( - - 3 4 - 6 - 8 9 ) 36 : ( 1 - - 4 - 6 - 8 9 ) 37 : ( - - - 4 5 6 7 - 9 ) 38 : ( 1 - 3 4 - - 7 - 9 ) 39 : ( - 2 3 - - 6 - 8 9 ) 40 : ( 1 2 - 4 - 6 - 8 - ) 41 : ( - 2 - 4 - 6 - 8 9 ) 42 : ( 1 - 3 - - 6 7 - 9 ) 43 : ( - 2 3 - 5 - 7 8 - ) 44 : ( - 2 - - 5 6 7 - 9 ) 45 : ( 1 - - 4 5 6 7 - - ) 46 : ( 1 2 3 - - - 7 - 9 ) 47 : ( 1 2 - 4 - 6 - - 9 ) 48 : ( - 2 - - 5 6 7 8 - ) 49 : ( 1 - 3 4 - 6 7 - - ) 50 : ( 1 - 3 - - 6 7 8 - ) 51 : ( - 2 3 - 5 6 - 8 - ) 52 : ( - 2 3 4 - 6 - - 9 )
1
bis52
, dann:
und dann das jeweiligeLottery
-Objekt aus demlotteryYear
-Array. -
Schreiben Sie eine
print()
-Methode, die den vontoString()
zurückgegebenenString
auf der Konsole ausgibt. -
Schreiben Sie eine Objektmethode
getArrayOfDoublets()
. Diese Methode gibt einLottery
-Array der Länge 2 zurück. Dieses Array enthält 2Lottery
-Objekte aus demlotteryArray
, die die gleichen gezogenen Zahlen beinhalten, also lautequals()
-Methode gleich sind. Sollten solcheLottery
-Objekte nicht imlotteryArray
existieren, soll das zurückgegebene Array die Länge0
haben.
- der privaten Objektvariablen
-
Erzeugen Sie in der
main()
-Methode ein Objekt der KlasseLotteryYear
.-
Rufen Sie dafür die
printFrequencyString()
- undprintFrequencyDiagram()
-Methoden auf. Es entsteht folgende Ausgabe (zufällige Beispielwerte):[ 27, 27, 30, 33, 34, 29, 25, 24, 31 ] --> 260 1 : *************************** 2 : *************************** 3 : ****************************** 4 : ********************************* 5 : ********************************** 6 : ***************************** 7 : ************************* 8 : ************************ 9 : *******************************
-
Prüfen Sie außerdem, ob das erzeugte Objekt
Lottery
-Dopplungen enthält (containsEquals()
). Wenn ja, dann sollen diese ermittelt (getArrayOfDoublets()
) und ausgegeben (print()
) werden. Es entsteht folgende Ausgabe (zufällige Beispielwerte):( 1 - - 4 5 - 7 - 9 ) ( 1 - - 4 5 - 7 - 9 )
-
Eine mögliche Lösung für Übung 10
package uebungen.uebung10;
import java.util.Random;
public class Lottery
{
private int[] drawingResults;
public Lottery()
{
this.drawingResults = new int[5];
}
public boolean contains(int number)
{
for (int index = 0; index < this.drawingResults.length; index++)
{
if(this.drawingResults[index] == number)
{
return true;
}
}
return false;
}
public void drawing()
{
Random r = new Random();
for (int index = 0; index < this.drawingResults.length; index++)
{
int zufZahl = r.nextInt(9) + 1;
while(this.contains(zufZahl))
{
zufZahl = r.nextInt(9) + 1;
}
this.drawingResults[index] = zufZahl;
}
}
public void sort()
{
for(int bubble=1; bubble<this.drawingResults.length; bubble++)
{
for(int index=0; index<this.drawingResults.length-bubble; index++)
{
if(this.drawingResults[index] > this.drawingResults[index+1])
{
int tmp = this.drawingResults[index];
this.drawingResults[index] = this.drawingResults[index+1];
this.drawingResults[index+1] = tmp;
}
}
}
}
@Override
public String toString()
{
this.sort();
String s = "( ";
int index = 0;
for(int number = 1; number <10; number++)
{
if(index<5 && this.drawingResults[index] == number)
{
s += this.drawingResults[index] + " ";
index++;
}
else
{
s += "- ";
}
}
s += ")";
return s;
}
public void print()
{
System.out.println(this.toString());
}
@Override
public boolean equals(Object o)
{
if(o == null)
{
return false;
}
if(this == o)
{
return true;
}
if(this.getClass() != o.getClass())
{
return false;
}
Lottery lo = (Lottery)o;
lo.sort();
this.sort();
for (int index = 0; index < this.drawingResults.length; index++)
{
if(this.drawingResults[index] != lo.drawingResults[index])
{
return false;
}
}
return true;
}
}
package uebungen.uebung10;
public class LotteryYear
{
private Lottery[] lotteryYear;
public LotteryYear()
{
final int WEEKS = 52;
this.lotteryYear = new Lottery[WEEKS];
for (int index = 0; index < this.lotteryYear.length; index++)
{
this.lotteryYear[index] = new Lottery();
this.lotteryYear[index].drawing();
this.lotteryYear[index].sort();
}
}
public int nrOfNumber(int number)
{
int nrOfNumber = 0;
for (int index = 0; index < this.lotteryYear.length; index++)
{
if(this.lotteryYear[index].contains(number))
{
nrOfNumber++;
}
}
return nrOfNumber;
}
public int[] frequency()
{
int[] frequency = new int[9];
for(int index=0; index<9; index++)
{
int number = index +1;
frequency[index] = this.nrOfNumber(number);
}
return frequency;
}
public void printFrequencyString()
{
int[] frequency = this.frequency();
int summe = 0;
System.out.print("[ ");
for (int index = 0; index < frequency.length; index++)
{
summe += frequency[index];
if(index<frequency.length-1)
{
System.out.print(frequency[index] +", ");
}
else
{
System.out.print(frequency[index]);
}
}
System.out.println(" ] --> " + summe);
}
public void printFrequencyDiagram()
{
int[] frequency = this.frequency();
for (int index = 0; index < frequency.length; index++)
{
System.out.print((index +1) + " : ");
for(int stars = 0; stars < frequency[index]; stars++)
{
System.out.print("*");
}
System.out.println();
}
}
public boolean containsEquals()
{
for (int index1 = 0; index1 < this.lotteryYear.length; index1++)
{
for (int index2 = index1+1; index2 < this.lotteryYear.length; index2++)
{
if(this.lotteryYear[index1].equals(this.lotteryYear[index2]))
{
return true;
}
}
}
return false;
}
@Override
public String toString()
{
String s = "";
for (int index = 0; index < lotteryYear.length; index++)
{
s += String.format("%2d : %s %n", (index+1), this.lotteryYear[index].toString());
}
return s;
}
public void print()
{
System.out.println(this.toString());
}
public Lottery[] getArrayOfDoublets()
{
Lottery[] loa = new Lottery[2];
for (int index1 = 0; index1 < this.lotteryYear.length; index1++)
{
for (int index2 = index1+1; index2 < this.lotteryYear.length; index2++)
{
if(this.lotteryYear[index1].equals(this.lotteryYear[index2]))
{
loa[0] = this.lotteryYear[index1];
loa[1] = this.lotteryYear[index2];
return loa;
}
}
}
return loa;
}
}
package uebungen.uebung10;
public class Testklasse
{
public static void main(String[] args)
{
System.out.printf("%n%n------------------- Lottery in Schleife --------------%n%n");
for (int index = 0; index < 10; index++)
{
Lottery lo = new Lottery();
lo.drawing();
lo.print();
}
System.out.printf("%n%n------------------- Lottery equals --------------%n%n");
Lottery lo1 = new Lottery();
lo1.drawing();
Lottery lo2 = new Lottery();
lo2.drawing();
while(!lo1.equals(lo2))
{
lo2.drawing();
}
lo1.print();
lo2.print();
System.out.printf("%n%n------------------- LotteryYear --------------%n%n");
LotteryYear ly = new LotteryYear();
ly.printFrequencyString();
ly.printFrequencyDiagram();
ly.print();
if(ly.containsEquals())
{
Lottery[] loa = ly.getArrayOfDoublets();
loa[0].print();
loa[1].print();
}
else
{
System.out.println("keine gleichen Ziehungen im Jahr");
}
}
}
Video zu Übung 10
Übung 11
- Erstellen Sie ein package
uebungen.uebung11
. -
Erstellen Sie in diesem package eine Klasse
Punkt3D
mit- drei privaten Objektvariablen
x
,y
undz
, jeweils vom Typint
, - einem parametrisierten Konstruktor
Punkt3D(int x, int y, int z)
. Mit den Parameterwerten werden die Objektvariablen initialisiert. - Getter für die drei Objektvariablen (
getX()
,getY()
undgetZ()
). - Überschreiben Sie die Methode
toString()
, so dass folgende textuelle Reräsentation alsString
erzeugt wird (Beispielwerte):also in runden Klammern die Werte von(5,2,3)
x
,y
undz
durch Komma getrennt. - Schreiben Sie eine Objektmethode
print()
, die den durchtoString()
erzeugtenString
auf die Konsole ausgibt. - Überschreiben Sie die Methode
equals(Object o)
so, dass zweiPunkt3D
-Objekte gleich sind, wenn ihre Objektvariablenx
,y
undz
jeweils paarweise den gleichen Wert besitzen. - Schreiben Sie eine Objektmethode
xIsSmaller(Punkt3D p)
, die eintrue
zurückgibt, wenn das aufrufende Objekt einen kleinerenx
-Wert hat alsp
;false
sonst. - Schreiben Sie eine Objektmethode
yIsSmaller(Punkt3D p)
, die eintrue
zurückgibt, wenn das aufrufende Objekt einen kleinereny
-Wert hat alsp
;false
sonst. - Schreiben Sie eine Objektmethode
zIsSmaller(Punkt3D p)
, die eintrue
zurückgibt, wenn das aufrufende Objekt einen kleinerenz
-Wert hat alsp
;false
sonst.
- drei privaten Objektvariablen
-
Erstellen Sie im gleichen package eine Klasse
Punkt2D
. Diese Klasse erbt vonPunkt3D
. Bei einem Objekt vom TypPunkt2D
ist der Wert vonz
stets0
!- Schreiben Sie einen parametrisierten Konstruktor
Punkt2D(int x, int y)
. Verwenden Sie die Parameterwerte, um den entsprechenden Objektvariablen Werte zuzuweisen und setzen Sie den Wert vonz
auf0
. - Überschreiben Sie die Methode
toString()
, so dass folgende textuelle Reräsentation alsString
erzeugt wird (Beispielwerte):also in runden Klammern die Werte von(5,2)
x
undy
durch Komma getrennt. ( der Wert vonz
wird nicht mehr ausgewertet, er ist ja immer0
).
- Schreiben Sie einen parametrisierten Konstruktor
-
Testen Sie die Klassen
Punkt3D
undPunkt2D
in einerTestklasse
mitmain()
-Methode wie folgt:- Erstellen Sie ein Array vom Typ
Punkt2D
. Es hat die Länge3
. - Erzeugen Sie ein
Random
-Objekt. Sie müssen dazu die KlasseRandom
aus demjava.util
-Paket importieren. -
innerhalb einer Schleife soll nun Folgendes passieren:
- Sie erzeugen sich für
x
,y
undz
jeweils Zufallszahlen aus dem Bereich[0, ... ,9]
(0
und9
inklusive, also10
mögliche Zufallszahlen). - wenn
z
den Wert0
hat, dann erzeugen Sie mit den zufällig erzeugten Werten vonx
undy
ein Objekt vom TypPunkt2D
und speichern dieses im Array. Rufen Sie dafür dieprint()
-Methode auf. - wenn
z
einen Wert ungleich0
hat, dann erzeugen Sie mit den zufällig erzeugten Werten vonx
,y
undz
ein Objekt vom TypPunkt3D
und rufen dafür dieprint()
-Methode auf. Ein solches Objekt wird nicht weiter gespeichert. - diesen Prozess wiederholen Sie so lange, bis das
Punkt2D[]
-Array befüllt ist, bis Sie also dreiPunkt2D
-Objekte erzeugt und im Array gespeichert haben.
- Sie erzeugen sich für
-
Eine mögliche Ausgabe könnte so sein (Zufallswerte):
das letzte Objekt ist immer ein---------------- Punkt2D und Punkt3D --------------- (3,8,9) (3,3,4) (1,2,3) (7,6,7) (0,4,7) (9,0,8) (0,3,8) (3,3,9) (7,2,1) (2,4) (1,8) (6,4,7) (2,1,2) (7,4,1) (7,1,1) (0,2,2) (6,4,9) (1,2,7) (3,9,8) (2,3)
Punkt2D
-Objekt, denn nach dem drittenPunkt2D
-Objekt hören Sie ja auf, Objekte zu erzeugen (Schleifenende).
- Erstellen Sie ein Array vom Typ
-
Erstellen Sie im gleichen package eine Klasse
Strecke
mit- den privaten Objektvariablen
start
undende
, jeweils vom TypPunkt2D
, - einem parametrisierten Konstruktor
Strecke(Punkt2D start, Punkt2D ende)
. Mit den Parameterwerten werden die Objektvariablen initialisiert. - einem weiteren parametrisierten Konstruktor
Strecke(int x1, int y1, int x2, int y2)
. Mit den Parameterwertenx1
undy1
erzeugen Sie sich einPunkt2D
-Objekt, das denstart
-Punkt bildet und mit den Parameterwertenx2
undy2
erzeugen Sie sich einPunkt2D
-Objekt, das denende
-Punkt bildet. -
Schreiben Sie eine Objektmethode
laenge()
, die die Länge derStrecke
alsdouble
zurückgibt. Sie können dazu die MethodenMath.abs(number)
für den absoluten Betrag vonnumber
undMath.sqrt(number)
für die Quadratwurzel vonnumber
(alsdouble
) verwenden. Tipp: -
Überschreiben Sie die Methode
toString()
, so dass folgende textuelle Reräsentation derStrecke
alsString
erzeugt wird (Beispielwerte):also die Start- und Endpunkte ausgegeben werden und die Länge der Strecke in eckigen Klammern nach dem WortStrecke [start=(2,4), ende=(1,8), Laenge= 4,1231cm]
Strecke
. - Schreiben Sie eine Objektmethode
print()
, die den durchtoString()
erzeugtenString
auf die Konsole ausgibt.
- den privaten Objektvariablen
-
Testen Sie die Klasse
Strecke
in derTestklasse
mitmain()
-Methode wie folgt:-
Erzeugen Sie
3
Objekte der KlasseStrecke
. Wählen Sie- als
start
-Punkt der ersten Strecke, den ersten Punkt aus demPunkt2D
-Array aus dem ersten Teil der Aufgabe, alsende
-Punkt den zweiten Punkt aus demPunkt2D
-Array aus dem ersten Teil, - als
start
-Punkt der zweiten Strecke, den zweiten Punkt aus demPunkt2D
-Array aus dem ersten Teil der Aufgabe, alsende
-Punkt den dritten Punkt aus demPunkt2D
-Array aus dem ersten Teil, - als
start
-Punkt der dritten Strecke, den dritten Punkt aus demPunkt2D
-Array aus dem ersten Teil der Aufgabe, alsende
-Punkt den ersten Punkt aus demPunkt2D
-Array aus dem ersten Teil.- Wenden Sie für alle drei
Strecke
-Objekte dieprint()
-Methode an. Es sollte folgende Ausgabe erzeugt werden (Beispielwerte):-------------------- Strecke ----------------------- Strecke [start=(7,1), ende=(6,4), Laenge= 3,1623cm] Strecke [start=(6,4), ende=(4,6), Laenge= 2,8284cm] Strecke [start=(4,6), ende=(7,1), Laenge= 5,8310cm]
- Wenden Sie für alle drei
- als
-
-
Erstellen Sie im gleichen package eine Klasse
PunkteArray
mit- der privaten Objektvariablen
punkte
vom TypPunkt2D[]
, - dem parametrisierten Konstruktor
PunkteArray(int anzahl)
, dem die Anzahl der Punkte, also die Länge despunkte
-Arrays übergeben wird. Erzeugen Sie unter Verwendung dieseranzahl
daspunkte
-Array. - Schreiben Sie eine Objektmethode
contains(Punkt2D p)
. Diese Methode gibt eintrue
zurück, wennp
impunkte
-Array enthalten ist undfalse
sonst. Tipp: Beachten Sie, dass es sein kann, dass nicht alle Elemente impunkte
-Array tatsächlich ein Objekt enthalten. Es kann also sein, dass manche Referenzvariablenthis.punkte[index]
den Wertnull
haben. Mithilfe vonthis.punkte[index] != null
können Sie prüfen, obthis.punkte[index]
nicht aufnull
zeigt. -
Schreiben Sie eine Objektmethode
fillArray()
. Diese Methode befüllt daspunkte
-Array vollständig mitPunkte2D
-Objekten. Beachten Sie:- die Werte für
x
undy
aller Objekte sollen jeweils zufällig mithilfe vonRandom
erzeugt werden. Der Wertebereich ist dabei jeweils[0, ... ,9]
(also0
und9
inklusive, insgesamt10
verschiedene Zufallszahlen), Punkt2D
-Objekte dürfen nicht doppelt impunkte
-Array vorkommen, d.h. es gibt keine zwei Punktep1
undp2
impunkte
-Array für diep1.equals(p2)
den Werttrue
hat.
- die Werte für
-
Überschreiben Sie die Methode
toString()
, so dass folgende textuelle Reräsentation desPunkteArray
alsString
erzeugt wird (Beispielwerte):also alle Punkte in eckigen Klammern durch Komma getrennt.[ (6,7), (3,2), (1,4), (5,0), (4,6), (9,5), (1,5), (0,3), (4,9), (6,9), (5,2), (1,9), (7,6), (2,3), (4,4) ]
-
Schreiben Sie eine Objektmethode
print()
, die den durchtoString()
erzeugtenString
auf die Konsole ausgibt. -
Hinweis: (für die folgenden Methoden) Ein Polygon ist ein geschlossener Linienezug aus Strecken. Die folgende Abbildung zeigt ein Polygon, das aus den Strecken
(p1, p2)
,(p2, p3)
,(p3, p4)
,(p4, p5)
und(p5, p1)
besteht. Es gibt darin also5
Punkte und5
Strecken: -
Schreiben Sie eine Objektmethode
createPolygon()
, die einStrecke[]
zurückgibt. DasStrecke[]
ist genau so lang wie daspunkte
-Array. DasStrecke[]
wird mit Objekten vom TypStrecke
vollständig befüllt. Dabei sind diestart
- undende
-Punkte immer die Nachbarpunkte aus dempunkte
-Array. Jeder Punkt aus dempunkte
-Array wird also zwei Mal verwendet, einmal alsende
-Punkt einer Strecke und einmal alsstart
-Punkt der nächsten Strecke imStrecke[]
. Beachten Sie, dass derstart
-Punkt der letzten Strecke imStrecke[]
der letzte Punkte impunkte
-Array und derende
-Punkt dieser Strecke der erste Punkt impunkte
-Array ist - siehe Skizze: -
Schreiben Sie eine Objektmethode
gesamtLaenge()
, die die Gesamtlänge aller Strecken im Polygon ermittelt und diese alsdouble
zurückgibt. Tipp: Sie müssen sich in der Methode erst mithilfe dercreatePolygon()
-Methode das Polygon erzeugen. - Schreiben Sie eine Objektmethode
amWeitestenLinks()
, die denPunkt2D
aus dempunkte
-Array zurückgibt, der am weitesten links von allen ist (den kleinstenx
-Wert von allen hat). Geben Sie diesen Punkt zurück. - Schreiben Sie eine Objektmethode
amWeitestenOben()
, die denPunkt2D
aus dempunkte
-Array zurückgibt, der am weitesten oben von allen ist (den kleinsteny
-Wert von allen hat). Geben Sie diesen Punkt zurück. - Schreiben Sie eine Objektmethode
laengsteStrecke()
, die die längsteStrecke
aller Strecken im Polygon ermittelt und diese zurückgibt. Tipp: Sie müssen sich in der Methode erst mithilfe dercreatePolygon()
-Methode das Polygon erzeugen. - Schreiben Sie eine Objektmethode
printStrecken()
. Diese Methode gibt alle Strecken aus dem Polygon auf die Konsole aus. Außerdem wird die Gesamtlänge aller Strecken aus dem Polygon, der am weitesten links stehende Punkt aus dempunkte
-Array und der am weitesten oben stehende Punkt aus dempunkte
-Array ausgegeben. Tipp: Sie müssen sich in der Methode erst mithilfe dercreatePolygon()
-Methode das Polygon erzeugen. Es sollte folgende Ausgabe erfolgen (Beispielwerte):Strecke [start=(0,1), ende=(2,1), Laenge= 2,0000cm] Strecke [start=(2,1), ende=(5,7), Laenge= 6,7082cm] Strecke [start=(5,7), ende=(8,7), Laenge= 3,0000cm] Strecke [start=(8,7), ende=(7,4), Laenge= 3,1623cm] Strecke [start=(7,4), ende=(8,1), Laenge= 3,1623cm] Strecke [start=(8,1), ende=(1,1), Laenge= 7,0000cm] Strecke [start=(1,1), ende=(4,6), Laenge= 5,8310cm] Strecke [start=(4,6), ende=(2,9), Laenge= 3,6056cm] Strecke [start=(2,9), ende=(9,4), Laenge= 8,6023cm] Strecke [start=(9,4), ende=(6,8), Laenge= 5,0000cm] Strecke [start=(6,8), ende=(9,8), Laenge= 3,0000cm] Strecke [start=(9,8), ende=(5,6), Laenge= 4,4721cm] Strecke [start=(5,6), ende=(8,4), Laenge= 3,6056cm] Strecke [start=(8,4), ende=(6,5), Laenge= 2,2361cm] Strecke [start=(6,5), ende=(0,1), Laenge= 7,2111cm] Gesamtlaenge der Strecken : 68,5964cm am weitesten links : (0,1) am weitesten oben : (0,1) laengste : Strecke [start=(2,9), ende=(9,4), Laenge= 8,6023cm]
- der privaten Objektvariablen
-
Testen Sie die Klasse
PunkteArray
in derTestklasse
mitmain()
-Methode wie folgt:- Erzeugen Sie ein Objekt der Klasse
PunkteArray
und übergeben Sie als Anzahl derpunkte
den Wert15
. - Rufen Sie für diese Objekt die Methoden
fillArray()
,print()
undprintStrecken()
auf. - Es sollten folgende Ausgaben erzeugt werden (Beispielwerte):
------------------ PunkteArray --------------------- [ (0,1), (2,1), (5,7), (8,7), (7,4), (8,1), (1,1), (4,6), (2,9), (9,4), (6,8), (9,8), (5,6), (8,4), (6,5) ] Strecke [start=(0,1), ende=(2,1), Laenge= 2,0000cm] Strecke [start=(2,1), ende=(5,7), Laenge= 6,7082cm] Strecke [start=(5,7), ende=(8,7), Laenge= 3,0000cm] Strecke [start=(8,7), ende=(7,4), Laenge= 3,1623cm] Strecke [start=(7,4), ende=(8,1), Laenge= 3,1623cm] Strecke [start=(8,1), ende=(1,1), Laenge= 7,0000cm] Strecke [start=(1,1), ende=(4,6), Laenge= 5,8310cm] Strecke [start=(4,6), ende=(2,9), Laenge= 3,6056cm] Strecke [start=(2,9), ende=(9,4), Laenge= 8,6023cm] Strecke [start=(9,4), ende=(6,8), Laenge= 5,0000cm] Strecke [start=(6,8), ende=(9,8), Laenge= 3,0000cm] Strecke [start=(9,8), ende=(5,6), Laenge= 4,4721cm] Strecke [start=(5,6), ende=(8,4), Laenge= 3,6056cm] Strecke [start=(8,4), ende=(6,5), Laenge= 2,2361cm] Strecke [start=(6,5), ende=(0,1), Laenge= 7,2111cm] Gesamtlaenge der Strecken : 68,5964cm am weitesten links : (0,1) am weitesten oben : (0,1) laengste : Strecke [start=(2,9), ende=(9,4), Laenge= 8,6023cm]
- Erzeugen Sie ein Objekt der Klasse
Eine mögliche Lösung für Übung 11
package uebungen.uebung11;
public class Punkt3D
{
private int x;
private int y;
private int z;
public Punkt3D(int x, int y, int z)
{
this.x = x;
this.y = y;
this.z = z;
}
public int getX()
{
return this.x;
}
public int getY()
{
return this.y;
}
public int getZ()
{
return this.z;
}
@Override
public String toString()
{
return String.format("(%d,%d,%d)", this.x, this.y, this.z);
}
public void print()
{
System.out.println(this.toString());
}
@Override
public boolean equals(Object o)
{
if(o == null) return false;
if(this == o) return true;
if(this.getClass() != o.getClass()) return false;
Punkt3D p = (Punkt3D)o;
return this.x == p.x && this.y == p.y && this.z == p.z;
}
public boolean xIsSmaller(Punkt3D p)
{
return this.x < p.x;
}
public boolean yIsSmaller(Punkt3D p)
{
return this.y < p.y;
}
public boolean zIsSmaller(Punkt3D p)
{
return this.z < p.z;
}
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
|
Video zu Übung 11 (unvollständig)
Quellcodes aus Klausurvorbereitung (05.02.2021)
package klausurvorbereitung;
public class Uhrzeit
{
private int stunden;
private int minuten;
private int sekunden;
public Uhrzeit(int sekunden)
{
final int STUNDE = 3600;
final int MINUTE = 60;
this.stunden = sekunden / STUNDE;
this.stunden = this.stunden % 24;
int restSekunden = sekunden % STUNDE;
// int restSekunden = sekunden - (this.stunden * STUNDE);
this.minuten = restSekunden / MINUTE;
restSekunden = restSekunden % MINUTE;
this.sekunden = restSekunden;
}
public void print()
{
System.out.println(this.stunden +" : " + this.minuten + " : " + this.sekunden);
}
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
|
Video zu Klausurvorbereitung (05.02.2021)
Weitere Übungsaufgaben (selbständiges Üben)¶
Hier werden lose und unregelmäßig Übungsaufgaben gesammelt. Am Ende des Semesters soll dann hier eine große Sammlung von Übungsaufgaben entstanden sein, die der eigenen Kontrolle dienen sollen. Die Übungen sind thematisch sortiert, allerdings überschneiden sich manche Themen in einigen Übungen.
Probeklausuren¶
Power
-
Implementieren Sie eine Klasse
Power
. -
Idee : Die Klasse
Power
implementiert die Potenz. Eine Potenz besteht aus einer Basis (base
) und dem Exponenten (exp
): base^exp, z.B.8^4 = 8 ∙ 8 ∙ 8 ∙ 8
-
Objektvariablen sind
base
undexp
vom Typint
. Beide Objektvariablen sind nur innerhalb der Klasse sichtbar! - Implementieren Sie getter für die Basis (
getBase()
) und für den Exponenten (getExp()
) (Sichtbarkeitpublic
). - Implementieren Sie für die Klasse
Power
einen parametrisierten KonstruktorPower(int base, int exp)
. Die Werte der Parameter werden verwendet, um den Objektvariablen Werte zuzuweisen. - Implementieren Sie eine Objektmethode
getValue()
, die eindouble
zurückgibt. Die Methode gibt den Wert der Potenz zurück, also z.B. für8^4
den Wert4096.0
. Beachten Sie:
Die Verwendung derMath
-Klasse ist nicht erlaubt! - Überschreiben Sie die Methode
toString()
, so dass eine Potenz in der Form(base, exp)
alsString
zurückgegeben wird, wobeibase
undexp
die Werte der jeweiligen Objektvariablen sein sollen, also z.B.(8, 4)
. - Implementieren Sie eine Objektmethode
print()
, die mithilfe vontoString()
eine Potenz auf der Konsole ausgibt. - Erstellen Sie eine Klasse
PowerTest
mitmain()
-Methode. Erzeugen Sie in dermain()
-Methode folgende fünf Objekte der KlassePower
:3^4
,-3^4
,3^0
,3^(-4)
,-3^(-4)
. Wenden Sie jeweils die Methodeprint()
an und geben Sie außerdem jeweils den Wert der Potenz auf die Konsole aus. Es sollte eine Ausgabe in ungefähr der folgenden Form erfolgen:(3,4) (3,4) = 81.0 (-3,4) (-3,4) = 81.0 (3,0) (3,0) = 1.0 (3,-4) (3,-4) = 0.012345679012345678 (-3,-4) (-3,-4) = 0.012345679012345678
- Erstellen Sie eine Klasse
PowerOfTwo
. Diese Klasse erbt vonPower
. - Idee : Ein Objekt der Klasse
PowerOfTwo
ist eine Potenz zur Basis2
, also z.B.2^4
. - Implementieren Sie einen parametrisierten Konstruktor
PowerOfTwo(int exp)
. Beachten Sie, dass der Basis der Wert2
zugewiesen wird. - Implementieren Sie eine Objektmethode
printBinary()
. Diese Methode gibt die Potenz als Binärzahl (bestehend aus Einsen und Nullen) auf die Konsole aus, z.B.2^4
:1 0 0 0 0
. Tipp : es kommt vorne immer eine1
und danach kommen so viele Nullen, wie der Exponent groß ist. Wenn der Exponent kliner als0
ist, dann geben SieZahl ist kleiner als 1
auf die Konsole aus. Die Binärzahl für eine Potenz kleiner als0
muss also nicht ermittelt werden. - Erzeugen Sie in der
main()
-Methode der KlassePowerTest
folgende drei Objekte der KlassePowerOfTwo
:2^4
,2^(-4)
,2^0
und rufen Sie jeweils die Methodenprint()
undprintBinary()
auf. Es sollte eine Ausgabe in ungefähr der folgenden Form erfolgen:(2,4) 1 0 0 0 0 (2,-4) Zahl ist kleiner als 1 (2,0) 1
- Erstellen Sie eine Klasse
PowerArray
. Objektvariable istp
vom TypPower[]
.p
ist nur innerhalb der Klasse sichtbar! - Implementieren Sie einen parametrisierten Konstruktor
PowerArray(int length)
. Darin wird dasp
-Array erzeugt. Die Länge vonp
entspricht dem Wert vonlength
. - Implementieren Sie eine Objektmethode
fillArray()
. Bei Aufruf der Methode soll das Arrayp
mit Objekten der KlassePower
gefüllt werden. Die Werte der Objektvariablen derPower
-Objekte werden zufällig mit Hilfe derRandom
-Klasse erzeugt (um dieRandom
-Klasse verwenden zu können, müssen Sie diese aus demjava.util
-Paket importieren). Beachten Sie folgende Anforderungen:- Sowohl die Basis als auch der Exponent können Werte aus dem Wertebereich
1..5
(jeweils inklusive) annehmen - Die Basis soll nie einen größeren Wert als der Exponent haben (aber es können beide gleich sein).
- Sowohl die Basis als auch der Exponent können Werte aus dem Wertebereich
- Implementieren Sie eine Objektmethode
createArrayOfValues()
. Diese Methode liefert eindouble[]
-Array zurück, das alle Werte der Potenzen aus demp
-Array enthält. - Implementieren Sie eine Objektmethode
getIndexExponent(int exponent)
, die den Index des (ersten) Elementes zurückliefert, bei dem dasPower
-Objekt den Exponenten hat, der als Parameter der Methode übergeben wird. Existiert ein solches Objekt nicht im Array, wird-1
zurückgegeben. - Überschreiben Sie die Methode
toString()
, so dass dasp
-Array in der Form (Beispiel)als[ (2,5), (2,3), (3,3), (1,5), (2,3), (1,3), (1,3), (1,2), (3,5), (2,3) ]
String
zurückgegeben wird. Implementieren Sie eine Methodeprint()
, die mithilfe vontoString()
dasp
-Array auf die Konsole ausgibt. - Implementieren Sie eine Methode
sort()
, die dasp
-Array nach den Größen der Werte der Potenzen ordnet – vom kleinsten Wert zum größten Wert. Die Verwendung derArrays
-Klasse aus demjava.util
-Paket ist nicht gestattet. Sollten 2 Potenzen den gleichen Wert haben, z.B.1^2
und1^4
, dann soll die Potenz mit dem höheren Exponent größer sein als die Potenz mit dem kleineren Exponenten. - Erzeugen Sie in der
main()
-Methode der KlassePowerTest
ein Objekt der KlassePowerArray
, so dass dasp
-Array die Länge10
hat. Rufen Sie für dieses Objekt die ObjektmethodenfillArray()
,print()
,sort()
und wiederprint()
auf. Testen Sie außerdem (mindestens) einmal diegetIndexExponent()
- und diecreateArrayOfValues()
- Methode (um das Array of Values auf der Konsole auszugeben, verwenden Sie die statischetoString()
-Methode derArrays
-Klasse (import java.util.Arrays;
). Es sollte eine Ausgabe in ungefähr der folgenden Form erfolgen (Zufallswerte):[ (1,5), (1,2), (3,5), (3,4), (4,4), (1,5), (1,2), (3,4), (2,3), (3,5) ] [ (1,2), (1,2), (1,5), (1,5), (2,3), (3,4), (3,4), (3,5), (3,5), (4,4) ] Index : 5 Index : -1 [1.0, 1.0, 1.0, 1.0, 8.0, 81.0, 81.0, 243.0, 243.0, 256.0]
eine mögliche Lösung für Power
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
|
Computer
-
Implementieren Sie eine Klasse
Computer
.- Objektvariablen sind
hersteller
vom TypString
,ram
vom Typint
undplatte
vom Typint
. Die Objektvariablen sind in der Klasse und allen abgeleiteten Klassen sichtbar! - Schreiben Sie einen parametrisierten Konstruktor
Computer(String hersteller, int ram, int platte)
. Die Parameterwerte werden genutzt, um den Objektvariablen die entsprechenden Werte zuzuweisen. - Schreiben Sie eine Objektmethode
gleicherHersteller(Computer c)
, die eintrue
zurückgibt, wennc
vom gleichen Hersteller ist, wie das aufrufende Objekt. Ansonsten wird einfalse
zurückgegeben. - Schreiben Sie eine Objektmethode
gleicherHersteller(String hersteller)
, die eintrue
zurückgibt, wenn das aufrufende Objekt den Hersteller hat, der als Parameterwert der Methode übergeben wird. Ansonsten wird einfalse
zurückgegeben. - Überschreiben Sie die Methode
toString()
, so dass der Computer in folgender Form angezeigt wird (Beispielwerte):lenovo mit 8 RAM und 256 SSD
- Schreiben Sie eine Methode
print()
, die mit Hilfe vontoString()
eine Ausgabe auf der Konsole erzeugt.
- Objektvariablen sind
-
Erstellen Sie eine Klasse
Testklasse
mitmain()
-Methode. Erzeugen Sie in dermain()
-Methode fünf Objekte der KlasseComputer
:- lenovo mit 8 RAM und 256 SSD
- lenovo mit 16 RAM und 512 SSD
- apple mit 4 RAM und 256 SSD
- apple mit 8 RAM und 512 SSD
- dell mit 8 RAM und 256 SSD
Wenden Sie jeweils die Methode
print()
an, wenden Sie die MethodegleicherHersteller(Computer c)
für den ersten Computer an und vergleichen ihn mit dem zweiten und dem dritten. Geben Sie jeweils den Wert des Vergleiches aus.
Es sollten folgende Ausgaben auf der Konsole erzeugt werden:--------------------- Test Computer -------------------- lenovo mit 8 RAM und 256 SSD lenovo mit 16 RAM und 512 SSD apple mit 4 RAM und 256 SSD apple mit 8 RAM und 512 SSD dell mit 8 RAM und 256 SSD c1 und c2 gleicher Hersteller ? : true c1 und c3 gleicher Hersteller ? : false
-
Erstellen Sie eine Klasse
Notebook
. Diese Klasse erbt von der KlasseComputer
.- Zusätzliche Objektvariable der Klasse
Notebook
istmonitor
vom Typint
. Die Objektvariablen sind in der Klasse und allen abgeleiteten Klassen sichtbar! - Implementieren Sie einen parametrisierten Konstruktor
Notebook(String hersteller, int ram, int platte, int monitor)
. Die Parameterwerte werden genutzt, um den Objektvariablen des zurückgegebenen Objektes die entsprechenden Werte zuzuweisen. - Überschreiben Sie die Methode
toString()
, so dass eine Zeichenkette der Formzurückgegeben wird (die entsprechenden Werte werden eingesetzt - siehe Ausgabe der(hersteller, ram, platte, monitor)
main()
-Methode unten).
- Zusätzliche Objektvariable der Klasse
-
Erzeugen Sie in der
main()
-Methode derTestklasse
zwei Objekte der KlasseNotebook
(Beispielwerte siehe nächste Zeile) und rufen Sie jeweils dieprint()
-Methode auf.
Es sollten folgende Ausgaben auf der Konsole erzeugt werden:--------------------- Test Notebook -------------------- (lenovo, 8, 256, 13) (lenovo, 16, 512, 15)
-
Erstellen Sie eine Klasse
NotebookArray
.- Objektvariable ist
notebooks
vom TypNotebook[]
. Die Objektvariable ist nur innerhalb der Klasse sichtbar! - Schreiben Sie einen parametrisierten Konstruktor
NotebookArray(int anzahl)
. Darin wird dasnotebooks
-Array mit der Längeanzahl
erzeugt (es wird noch nicht mitNotebook
-Objekten befüllt - das macht die nächste Methode). -
Schreiben Sie eine Objektmethode
konfigurieren()
. Bei Aufruf der Methode wird das Arraynotebooks
mit Objekten der KlasseNotebook
befüllt.
Beachten Sie folgende Anforderungen:- das
notebooks
-Array wird vollständig befüllt -
für das Erzeugen der Objekte wird eine Zufallszahl aus dem Bereich
[0, 1, 2, 3, 4]
(4
inklusive) erzeugt. Nutzen Sie dazu die KlasseRandom
aus demjava.util
-Paket. Mithilfe vonnextInt(int exclusiveBorder)
wird eine Zufallszahl erzeugt. Je nach Wert der Zufallszahl wird ein anderes Notebook erzeugt:Wert
0
-> zu erzeugendes Objekt:("lenovo", 8, 256, 13)
Wert1
-> zu erzeugendes Objekt:("lenovo", 16, 512, 15)
Wert2
-> zu erzeugendes Objekt:("apple", 4, 256, 13)
Wert3
-> zu erzeugendes Objekt:("apple", 8, 512, 13)
Wert4
-> zu erzeugendes Objekt:("dell", 8, 512, 15)
- das
-
Überschreiben Sie die Objektmethode
toString()
. Diese Methode gibt einen String in der Form (Beispielwerte):zurück.[ 5 : (lenovo, 8, 256, 13 ), (apple, 8, 512, 13 ), (lenovo, 16, 512, 15 ), (lenovo, 8, 256, 13 ), (apple, 8, 512, 13 )]
Beachten Sie:- die eckigen Klammern zu Beginn und Ende des Strings
- die Angabe der Anzahl der Elemente am Anfang (im obigen Beispiel
5 :
) - das Komma zwischen den Elementen (aber nicht nach dem letzten Element)
-
Schreiben Sie eine Methode
print()
, die den intoString()
erzeugtenString
auf die Konsole ausgibt. -
Schreiben Sie eine Objektmethode
getHersteller(String hersteller)
. Diese Methode gibt ein Objekt vom TypNotebookArray
zurück. Dasnotebooks
-Array des erzeugten Objektes enthält genau alle Notebooks aus demnotebooks
-Array des aufrufenden Objektes, die von dem Hersteller sind, der als Parameterwert übergeben wird.
Beispiel: Angenommen, dasnotebooks
-Array des aufrufenden Objektes sieht so aus:Dann würde bei Aufruf der Methode[ 10 : (lenovo, 16, 512, 15 ), (apple, 8, 512, 13 ), (apple, 4, 256, 13 ), (apple, 8, 512, 13 ), (lenovo, 8, 256, 13 ), (lenovo, 16, 512, 15 ), (lenovo, 16, 512, 15 ), (lenovo, 16, 512, 15 ), (apple, 4, 256, 13 ), (apple, 4, 256, 13 ) ]
getHersteller("apple")
das zurückgegebeneNotebookArray
-Objekt folgendesnotebooks
-Array haben:, bei Aufruf der Methode[ (apple, 8, 512, 13 ), (apple, 4, 256, 13 ), (apple, 8, 512, 13 ), (apple, 4, 256, 13 ), (apple, 4, 256, 13 ) ]
getHersteller("lenovo")
das zurückgegebeneNotebookArray
-Objekt folgendesnotebooks
-Array:und bei Aufruf der Methode[ (lenovo, 16, 512, 15 ), (lenovo, 8, 256, 13 ), (lenovo, 16, 512, 15 ), (lenovo, 16, 512, 15 ), (lenovo, 16, 512, 15 ) ]
getHersteller("dell")
das zurückgegebeneNotebookArray
-Objekt ein leeresnotebooks
-Array:[ ]
-
Schreiben Sie eine Objektmethode
sortRamPlatte()
. Diese Methode sortiert dasnotebooks
-Array wie folgt:- aufsteigend nach RAM-Größe (kleinste RAM-Größe zuerst)
- ist die RAM-Größer zweier Notebooks gleich, entscheidet die Plattengröße (kleinste Plattengröße zuerst)
- Objektvariable ist
-
Erzeugen Sie in der
main()
-Methode derTestklasse
ein Objekt der KlasseNotebookArray
, so dass dasnotebooks
-Array die Länge10
hat. Rufen Sie für dieses Objekt die Objektmethodenkonfigurieren()
,print()
,sortRamPlatte()
undprint()
auf. Testen Sie außerdem diegetHersteller()
-Methode für alle drei Hersteller und geben Sie jeweils das erzeugte Array aus.
Es sollten folgende Ausgaben auf der Konsole erzeugt werden (Zufallswerte!):------------------ Test NotebookArray ------------------ [ 10 : (apple, 8, 512, 13), (lenovo, 16, 512, 15), (apple, 4, 256, 13), (lenovo, 8, 256, 13), (apple, 4, 256, 13), (dell, 8, 512, 15), (apple, 4, 256, 13), (apple, 8, 512, 13), (lenovo, 8, 256, 13), (apple, 8, 512, 13)] [ 10 : (apple, 4, 256, 13), (apple, 4, 256, 13), (apple, 4, 256, 13), (lenovo, 8, 256, 13), (lenovo, 8, 256, 13), (apple, 8, 512, 13), (dell, 8, 512, 15), (apple, 8, 512, 13), (apple, 8, 512, 13), (lenovo, 16, 512, 15)] [ 3 : (lenovo, 8, 256, 13), (lenovo, 8, 256, 13), (lenovo, 16, 512, 15)] [ 6 : (apple, 4, 256, 13), (apple, 4, 256, 13), (apple, 4, 256, 13), (apple, 8, 512, 13), (apple, 8, 512, 13), (apple, 8, 512, 13)] [ 1 : (dell, 8, 512, 15)]
eine mögliche Lösung für Computer
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
|
Uhrzeit
-
Implementieren Sie eine Klasse
Uhrzeit
.- Objektvariablen sind
stunden
vom Typint
,minuten
vom Typint
undsekunden
vom Typint
. Die Objektvariablen sind nur in der Klasse sichtbar! -
Schreiben Sie einen parametrisierten Konstruktor
Uhrzeit(int sekunden)
. Übergeben wird eine beliebige Anzahl von Sekunden. Aus diesem Wert wird die Uhrzeit berechnet.- Beispiel 1: Angenommen, es wird der Wert
83
übergeben, dann sind das0
Stunden,1
Minute (60
Sekunden) und23
Sekunden. - Beispiel 2: Angenommen, es wird der Wert
3662
übergeben, dann sind das1
Stunde (3600
Sekunden),1
Minute (60
Sekunden) und2
Sekunden. - Beispiel 3: Angenommen, es wird der Wert
86399
übergeben, dann sind das23
Stunden (23x3600
Sekunden),59
Minuten (59x60
Sekunden) und59
Sekunden. - Die Stunden sollen immer im Bereich
0..23
sein, d.h. für einen Stunden-Wert größer als24
nehmen Sie einfach denModulo-24
-Wert. - Initialisieren Sie die Objektvariablen mit den berechneten Werten.
- Beispiel 1: Angenommen, es wird der Wert
-
Schreiben Sie eine Objektmethode
uhrzeitInSekunden()
. Diese Methode gibt die Uhrzeit in Sekunden alsint
zurück. Der Wert der zurückgegebenen Sekunden berechnet sich aus den Stunden multipliziert mit3600
plus den Minuten multipliziert mit60
plus den Sekunden des aufrufendenUhrzeit
-Objektes. - Schreiben Sie eine Objektmethode
frueher(Uhrzeit u)
, die eintrue
zurückgibt, wenn die Uhrzeit des aufrufenden Objektes früher liegt als der Wert vonu
;false
sonst. - Schreiben Sie eine Objektmethode
jetztPlusXSekunden(int sekunden)
, die ein neuesUhrzeit
-Objekt zurückgibt. Die Uhrzeit des neuen Objektes ergibt sich aus der Uhrzeit des aufrufenden Objektes plus der Anzahl der Sekunden, die als Parameter übergeben werden. - Schreiben Sie eine Objektmethode
differenzInSekunden(Uhrzeit u)
, die die Anzahl in Sekunden (int
) zurückgibt, die zwischen der Uhrzeit des aufrufenden Objektes undu
liegen. Geben Sie die Anzahl stets als positiven Wert zurück! Sie können dazu die MethodeMath.abs(int wert)
verwenden, die den absoluten Betrag vonwert
zurückgibt. - Überschreiben Sie die Methode
toString()
, so dass der Wert des aufrufenden Objektes in der Formhh:mm:ss
alsString
zurückgegeben wird, z.B.23:59:59
. Achten Sie darauf, dass die Stunden, Minuten und Sekunden führende Nullen enthalten können, also z.B.01:02:03
!
- Objektvariablen sind
-
Erstellen Sie eine Klasse
Testklasse
mitmain()
-Methode. Erzeugen Sie in dermain()
-Methode vier Objekte der KlasseUhrzeit
. Verwenden Sie als Parameterwerte:83
,3662
,86399
und172799
. Wenden Sie jeweils die MethodenSystem.out.print()
undprint()
ausUhrzeit
so an, dass folgende Ausgabe entsteht:
z1 : 00:01:23 z2 : 01:01:02 z3 : 23:59:59 z4 : 23:59:59
-
Wenden Sie außerdem jeweils die Methoden
System.out.println()
sowiefrueher()
,jetztPlusXSekunden()
,differenzInSekunden()
(und evtl.toString()
) ausUhrzeit
so an, dass folgende Ausgabe entsteht:
z1 frueher als z2 ? true z3 frueher als z4 ? false z1 plus 40 Sekunden : 00:02:03 z2 plus 3598 Sekunden : 02:01:00 z3-z2 in Sekunden : 82737
-
Erstellen Sie eine Klasse
UhrzeitArray
. Objektvariableuhren
ist ein Array, das Elemente vonUhrzeit
aufnimmt. Die Variable ist nur innerhalb der Klasse sichtbar.- Schreiben Sie einen parametrisierten Konstruktor
UhrzeitArray(int laenge)
. Innerhalb des Konstruktors wird das Array erzeugt, auf das die Objektvariableuhren
referenziert. Das Array hat die Längelaenge
(Parameterwert). - Schreiben Sie eine Objektmethode
fill()
, die dasuhren
-Array vollständig mitUhrzeit
-Objekten befüllt. Die Parameterwerte derUhrzeit
-Objekte werden zufällig erzeugt. Erzeugen Sie ein Objekt der KlasseRandom
(dafür mussjava.util.Random
importiert werden) und erzeugen Sie die Parameter-Werte für dieUhrzeit
-Objekte zufällig (unter Verwendung desRandom
-Objektes) aus dem Bereich[0, ..., 86399]
(0
und86399
jeweils inklusive) - Überschreiben Sie die Objektmethode
toString()
, so dass dasuhren
-Array wie folgt als Zeichenkette zurückgegeben wird (Beispielwerte):Also die Uhrzeit jeweils in runden Klammern und durch Komma getrennt sowie das ganze Array in runden Klammern.((06:38:30), (01:59:32), (07:16:48), (01:37:58), (18:16:06), (07:50:33), (01:41:47), (05:07:41), (12:38:08), (02:00:04))
- Schreiben Sie eine Objektmethode
print()
, so dass auf der Konsole die durchtoString()
erzeugte eine Zeichenkette ausgegeben wird. - Schreiben Sie eine Objektmethode
spaeteste()
. Diese Methode gibt die kleinste (früheste)Uhrzeit
aus dem Arrayuhren
zurück. - Schreiben Sie eine Objektmethode
zwischen(Uhrzeit frueh, Uhrzeit spaet)
. Diese Methode gibt einUhrzeitArray
-Objekt zurück. Das zurückgegebeneUhrzeitArray
-Objekt enthält alleUhrzeit
-Objekte aus dem Arrayuhren
, welche zwischen den beiden Uhrzeitenfrueh
undspaet
liegen. - Schreiben Sie eine Objektmethode
sortieren()
. Diese Methode sortiert dasuhren
-Array aufsteigend beginnend mit der kleinsten Uhrzeit. - Schreiben Sie eine Objektmethode
kleinsterAbstand()
. Diese Methode gibt einUhrzeitArray
der Länge2
zurück. Es enthält die beidenUhrzeit
en aus dem Arrayuhren
, welche den kleinsten Abstand (Differenz in Sekunden) haben. Sie können beim Schreiben der Methode davon ausgehen, dass dasuhren
-Array bereits sortiert ist!
- Schreiben Sie einen parametrisierten Konstruktor
-
Erzeugen Sie in der
main()
-Methode ein Objekt der KlasseUhrzeitArray
. Das Array soll die Länge10
haben.-
Rufen Sie die
fill()
- und dann dieprint()
-Methode auf. Es entsteht folgende Ausgabe (Zufallswerte):((06:38:30), (01:59:32), (07:16:48), (01:37:58), (18:16:06), (07:50:33), (01:41:47), (05:07:41), (12:38:08), (02:00:04))
-
Wenden Sie jeweils die Methoden
System.out.print()
sowiespaeteste()
so an, dass folgende Ausgabe entsteht (Zufallswerte):
spaeteste : 18:16:06
-
Wenden Sie jeweils die Methoden
System.out.print()
sowiesortieren()
undprint()
so an, dass folgende Ausgabe entsteht (Zufallswerte):sortiert : ((01:37:58), (01:41:47), (01:59:32), (02:00:04), (05:07:41), (06:38:30), (07:16:48), (07:50:33), (12:38:08), (18:16:06))
-
Erzeugen Sie zwei weitere
Uhrzeit
-Objektefrueh
(Parameterwert36000
) undspaet
(Parameterwert72000
) und rufen Sie damit die Objektmethodenzwischen(frueh, spaet)
undprint()
auf, so dass folgende Ausgabe entsteht (Zufallswerte):frueh : 10:00:00 spaet : 20:00:00 zwischen : ((12:38:08), (18:16:06))
-
Wenden Sie jeweils die Methoden
System.out.print()
sowiekleinsterAbstand()
undprint()
so an, dass folgende Ausgabe entsteht (Zufallswerte):
kleinster Abstand : ((01:59:32), (02:00:04))
-
-
Zur Kontrolle: ungefähre Ausgabe auf der Konsole (in Teil 2 Zufallswerte):
--------------- Teil 1 --------------- z1 : 00:01:23 z2 : 01:01:02 z3 : 23:59:59 z4 : 23:59:59 z1 frueher als z2 ? true z3 frueher als z4 ? false z1 plus 40 Sekunden : 00:02:03 z2 plus 3598 Sekunden : 02:01:00 z3-z2 in Sekunden : 82737 --------------- Teil 2 --------------- ((06:38:30), (01:59:32), (07:16:48), (01:37:58), (18:16:06), (07:50:33), (01:41:47), (05:07:41), (12:38:08), (02:00:04)) spaeteste : 18:16:06 sortiert : ((01:37:58), (01:41:47), (01:59:32), (02:00:04), (05:07:41), (06:38:30), (07:16:48), (07:50:33), (12:38:08), (18:16:06)) frueh : 10:00:00 spaet : 20:00:00 zwischen : ((12:38:08), (18:16:06)) kleinster Abstand : ((01:59:32), (02:00:04))
eine mögliche Lösung für Uhrzeit
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
|
Klausur 1.PZ
- Hier ist die Aufgabe als pdf.
eine mögliche Lösung für Klausur 1.PZ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
|
Ausdrücke¶
gleich 12
Welche der folgenden Ausdrücke haben den Wert 12?
a) 12 % 13
b) 24 % 2
c) 24/2
d) 25/2
Pre- und Postoperator
Welchen Wert hat die Variable c
nach Ausführen der Anweisungen?
int a = 300;
int b = a++;
int c = --b;
Schleifen¶
Laufvariablen
Welche der Schleifen gibt alle Elemente des Arrays nums
aus? Das Array enthält genau 4 Zahlen.
a) for (int i = 0; i < nums.length; i++) { System.out.println(nums[i]); }
b) for (int i = 0; i <= 3; i++) { System.out.println(nums[i]); }
c) for (int i = 1; i <= 3; i++) { System.out.println(nums[i]); }
d) for (int i = 0; i <= 3; i++) { System.out.println(nums[0]); }
e) for (int i = nums.length - 1; i >= 0; i--) { System.out.println(nums[i]); }
Quadratzahl
Schreiben Sie eine Methode istQuadratzahl(int zahl)
, die ein true
zurückgibt, wenn zahl
eine Quadratzahl ist und ein false
sonst. Die Math
-Klasse soll nicht verwendet werden.
Primzahl
Schreiben Sie eine Methode printPrimzahlenBisN(int n)
, die alle Primzahlen bis n
auf die Konsole ausgibt. Schreiben Sie sich dazu eine Hilfsmethode istPrimzahl(int zahl)
, die ein true
zurückgibt, wenn zahl
eine Primzahl ist und ein false
, wenn nicht.
int-Zahl umdrehen
Schreiben Sie eine Methode int reverseInt(int number)
, die die übergebene number
umdreht und die umgedrehte int
-Zahl zurückgibt, also z.B. aus 1234
wird 4321
. Weitere Beispiele: aus -123
wird -321
und aus 1200
wird 21
.
Zahlen raten
Schreiben Sie folgendes Programm. Mithilfe von Random
"denkt" sich das Programm eine Zahl zwischen 0
und 100
aus. Sie können über die Konsole dann eine Zahl eingeben. Das Programm sagt Ihnen, ob die "gedachte" Zahl größer oder kleiner als die von Ihnen eingegebene Zahl ist. Sie geben solange eine Zahl ein, bis Sie die "gedachte" Zahl erraten haben.
Binärzahl
Schreiben Sie eine Methode, die eine short
-Zahl in eine Binärzahl umwandelt. Diese Binärzahl speichern Sie als long
. Z.B. ist 32
binär 100000
, 63
ist 111111
, 48
ist 110000
usw.
Arrays¶
Implementieren Sie eine Methode, die zwei als Parameter übergebene sortierte int
-Arrays zu einem sortierten int
-Array zusammenfügt. Geben Sie das neue sortierte Array zurück
Implementieren Sie eine Methode, die zwei als Parameter übergebene unsortierte int
-Arrays zu einem sortierten int
-Array zusammenfügt. Geben Sie das neue sortierte Array zurück
Implementieren Sie eine Methode int[] explode(int number)
. Diese Methode erstellt ein int[]
-Array, das wie folgt befüllt ist: Bsp. number=5
→ {1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5}
. Für jede Zahl x
gibt es also x
Einträge im Array bis einschließlich number
Wrapper-Klassen¶
Initialisierung einer Long-Variablen
Welche Anweisungen initialisieren eine Long-Variable korrekt?
a) Long val = new Long(4321);
b) Long val = 4321L;
c) Long val = new Long("4321");
d) Long val = Long.parseLong("4321");
Vererbung¶
Sichtbarkeitsmodifizierer
Gegeben sind die beiden Klassen - beide sind in verschiedenen Paketen:
1 2 3 |
|
1 2 3 4 5 6 7 |
|
???
eingesetzt werden, damit das Programm compiliert werden kann?
a) protected
b) keiner (default)
c) public
d) private