Informatiker Board (http://www.informatikerboard.de/board/index.php)
- Themengebiete (http://www.informatikerboard.de/board/board.php?boardid=1)
-- Praktische Informatik (http://www.informatikerboard.de/board/board.php?boardid=6)
--- OO Programmierung (http://www.informatikerboard.de/board/thread.php?threadid=2023)
Geschrieben von neuling96 am 23.12.2014 um 21:39:
OO Programmierung
3 codes vorgegeben :
| code: |
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:
|
public class Grinch {
public static Haus[] stadt;
private Geschenk[] geklauteGeschenke = new Geschenk[0];
private int restzeit;
public Grinch
public void aufTourGehen() {
// hier anfangen, die Häuser auszuräumen
}
public static void main(String[] args) {
// mit dieser Methode können Sie nachher Ihre Implementierung testen:
test();
}
public static void test() {
stadt = new Haus[12];
for(int i=0;i<stadt.length;i++) {
stadt[i] = new Haus();
}
Grinch grinch = new Grinch();
grinch.aufTourGehen();
grinch.inventur();
}
}
|
|
| code: |
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:
|
import java.util.Random;
public class Haus {
public Geschenk[] baum; // Geschenke unter dem Baum
public Geschenk[] schrank; // Geschenke im Schrank
public Geschenk[] tisch; // Geschenke auf dem Tisch
/**
* Konstruktor für Haus:
* Erzeugt ein neues Haus mit zufällig verteilten Geschenken.
*/
public Haus() {
Random r = new Random();
this.baum = new Geschenk[r.nextInt(31)];
for(int i=0;i<this.baum.length;i++) {
this.baum[i] = new Geschenk();
}
this.schrank = new Geschenk[r.nextInt(31)];
for(int i=0;i<this.schrank.length;i++) {
this.schrank[i] = new Geschenk();
}
this.tisch = new Geschenk[r.nextInt(31)];
for(int i=0;i<this.tisch.length;i++) {
this.tisch[i] = new Geschenk();
}
}
}
|
|
| code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
|
import java.util.Random;
public class Geschenk {
private int [] baum;
private int [] baum
/**
* Das Gewicht des Geschenks in Gramm
*/
public int gewicht;
/**
* Konstruktor für Geschenk:
* Erzeugt ein neues Geschenk mit zufällig gewählter Größe
*/
public Geschenk() {
Random r = new Random();
this.gewicht = r.nextInt(901) + 100; // Zufallszahl zwischen 100 und 1000
}
}
|
|
Geschrieben von neuling96 am 23.12.2014 um 21:43:
upps im ersten code war die zeile
private int restzeit; nicht vorgegeben
a) Es ist der 23. Dezember und der Grinch m ochte loslegen. Er weiß, dass er nur bis zum 31. Dezember
Zeit hat, denn da ist er zu einer Neujahrsparty auf Gran Canaria eingeladen. Der Grinch arbeitet nur 10 Stunden jede Nacht.
Erweitern Sie die Klasse Grinch um eine Variable
restzeit
, die die verbleibenden Stunden als Ganzzahl halt. Fur jeden erzeugten Grinch soll die Restzeit mit 80 Stunden initialisiert werden. Es wird nicht zwischen einzelnen Nachten unterschieden
| code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
|
public class Grinch {
public static Haus[] stadt;
private Geschenk[] geklauteGeschenke = new Geschenk[0];
private int restzeit;
|
|
Geschrieben von neuling96 am 23.12.2014 um 21:53:
public class Grinch {
public static Haus[] stadt;
private Geschenk[] geklauteGeschenke = new Geschenk[0];
private int restzeit=80;
oder
public class Grinch {
public static Haus[] stadt;
private Geschenk[] geklauteGeschenke = new Geschenk[0];
private int restzeit;
public Grinch(Haus[] stadt,Geschenk[] geklauteGeschenke, int restzeit){
this.restzeit=80;
Geschrieben von neuling96 am 23.12.2014 um 22:33:
Erweitern Sie die Klasse
Haus um eine Methode ausraeumen( , die alle Geschenke aus dem Hau entfernt (aus den Arraysbaum
,schrank und tisch ) und gesammelt in einem neuen Array zuruck gibt. Der Zugriff sollte auf folgende Weise moglich sein
Haus h = new Haus();
Geschenk[] geschenke = h.ausraeumen()
| code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
|
public static Geschenk [] ausraeumen(Geschenk[] baum,Geschenk[] schrank,Geschenk[] tisch){
Geschenk [] löschen= {};
Geschenk[] baum=Geschenk [] löschen;
Geschenk[] schrank=Geschenk[] baum;
Geschenk[] tisch=Geschenk[] schrank;
Geschenk [] klau = new Geschenk[baum.length+schrank.length+ tisch.length]
for (int i=0; i<baum.length;i++){
Geschenk [i] klau=Geschenk[i] baum;
}
for (inty= 0; y<schrank.length;y++){
Geschenk [y+baum.length] klau=Geschenk[y] schrank
}
for (int z= 0; y<tisch.length;z++){
Geschenk [z+tisch.length] klau=Geschenk[z] schrank
}
return klau;
}
|
|
Geschrieben von neuling96 am 24.12.2014 um 01:28:
oh man o man... ich hoffe das passt besser
| code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
|
public static Geschenk [] ausraeumen(Geschenk[] baum,Geschenk[] schrank,Geschenk[] tisch){
Geschenk [] löschen= new Geschenk [0];
Geschenk [] löschen= {};
baum= löschen;
schrank=baum;
tisch=schrank;
Geschenk [] klau = new Geschenk[baum.length+schrank.length+ tisch.length]
for (int i=0; i<baum.length;i++){
klau [i]= baum[i];
}
for (inty= 0; y<schrank.length;y++){
klau [y+baum.length] = schrank[y]
}
for (int z= 0; y<tisch.length;z++){
klau [z+schrank.length+tisch.length]= schrank[z]
}
return klau;
}
|
|
Geschrieben von neuling96 am 24.12.2014 um 07:27:
(c) Geschenke klauen kostet Zeit. Fur¨ alle angefangenen zehn Geschenke pro Haus veranschlagt der Grinch eine Stunde. Wenn also das ausraeumen() eines Hauses 54 Geschenke ergibt, hat der Grinch 6 Stunden in diesem Haus verbracht. Die Hauser¨ der Stadt hat sich der Grinch alle in seiner Klassenvariable stadt gemerkt.
Erweitern Sie die Methode aufTourGehen() in der Klasse Grinch so, dass der Grinch nach und nach die Hauser¨ der Stadt ablauft¨ und jedes Haus ausraumt.¨ Die erbeuteten Geschenke sichert sich der Grinch in seiner Variable geklauteGeschenke. Eine Methode, zwei Arrays zu kombinieren, haben Sie in der Vorlesung schon kennengelernt.
Achten Sie darauf, dass der Grinch sein Zeitkonto nicht uberschreitet.¨ Mit jedem besuchten Haus soll das Zeitkonto um die passende Anzahl Stunden schrumpfen. Ist die Zeit abgelaufen, bricht der Grinch seinen Diebeszug ab. Die Geschenke des zuletzt besuchten Hauses, wahrend¨ dem die Zeituberschreitung¨ passiert, sollen dabei verworfen werden.
| code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
|
public void aufTourGehen() {
int sum=0;
for (int h=0; h< stadt.length; h++) {
Haus h = new Haus();
y= h.ausraeumen();
sum+=y.length;
}
Geschenk[]geklauteGeschenke= new Geschenk [sum];
int a=80;
sum=0;
for (int h=0; h< stadt.length; h++){
Haus h = new Haus();
y= h.ausraeumen();
a-=y.length/10;
if(a>=0){
for int i=0; i<y.length ; i++){
Geschenk[i+sum] geschenke = y[i]
sum+=y.length
}
}
}
|
|
Geschrieben von eulerscheZahl am 24.12.2014 um 08:13:
Ich fang' mal von oben an.
Die Methode test hast du selbst geschrieben, oder? Es macht nämlich keinen Sinn, eine Stadt zu erzeugen, wenn der Grinch sie nicht kennt (sie muss ihm als Funktionsargument übergeben werden).
zu a)
die Initialisiertung der Restzeit ist auf beide Wege möglich. Warum du dem Konstruktor des Grinchs geklauteGeschenke übergibst, erschließt sich mir nicht (die will er ja erst noch klauen, hat sie nicht schon zu Beginn).
zu b)
Sieht dir nochmal den Beispielaufruf an. ausraeumen soll Geschenke liefern, keine entgegennehmen. Und wenn du die Geschenke aus dem Haus löschst, bevor du sie zu den geklauten kopierst, dann sind sie unwiederbringlich weg.
zu c)
wieso wird hir eine neue Stadt angelegt, der Grinch hat doch schon eine, oder nicht?
mit a=80 machst du die Variable restzeit überflüssig. Und was ist y für ein Datentyp? Ein Haus mit 9 Geschenken kann der Grinch ohne Zeitverlust leerräumen.
Geschrieben von neuling96 am 24.12.2014 um 08:39:
nein war so vorgegeben
wieso wird hir eine neue Stadt angelegt, der Grinch hat doch schon eine, oder nicht?
ja
ich habe verscuht deine Vorschläge umzusetzen
| code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
|
public static Geschenk [] ausraeumen(){
Geschenk [] klau = new Geschenk[baum.length+schrank.length+ tisch.length];
for (int i=0; i<baum.length;i++){
klau [i]= baum[i];
}
for (inty= 0; y<schrank.length;y++){
klau [y+baum.length] = schrank[y]
}
for (int z= 0; y<tisch.length;z++){
klau [z+schrank.length+tisch.length]= schrank[z]
}
Geschenk [] löschen= new Geschenk [0];
Geschenk [] löschen= {};
baum= löschen;
schrank=baum;
tisch=schrank;
return klau;
} |
|
| code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
|
public void aufTourGehen() {
int sum=0;
for (int h=0; h< stadt.length; h++) {
Haus h = new Haus();
y= h.ausraeumen();
sum+=y.length;
}
Geschenk[]geklauteGeschenke= new Geschenk [sum];
;
sum=0;
for (int h=0; h< stadt.length; h++){
Haus h = new Haus();
Geschenk [] y= new Geschenk [h.ausraeumen().length]
y= h.ausraeumen();
restzeit-=y.length/10;
if(a>=0){
for int i=0; i<y.length ; i++){
Geschenk[i+sum] geschenke = y[i]
sum+=y.length
}
|
|
Geschrieben von neuling96 am 24.12.2014 um 23:39:
ich hab mir Gedanken gemacht, wie ich das stadt array benutzen kann und das problem mitin Haus mit 9 Geschenken kann der Grinch ohne Zeitverlust leerräumen.
| code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
|
public void aufTourGehen() {
int sum=0;
for (int h=0; h< stadt.length; h++) {
sum+=stadt[h].length;
}
Geschenk[]geklauteGeschenke= new Geschenk [sum];
sum=0;
(double)restzeit;
for (int h=0; h< stadt.length; h++){
(double)stadt[h].length;
restzeit-=stadt[h].length/10;
Geschenk [] y= new Geschenk [stadt[h].ausraeumen().length]
y= stadt[h].ausraeumen();
if(a>=0){
for int i=0; i<y.length ; i++){
geschenke[i+sum] = y[i];
sum+=y.length;
}
|
|
Geschrieben von eulerscheZahl am 25.12.2014 um 07:21:
Nutze den Compiler!
(double)restzeit; kann so nicht allein stehen, was soll damit sein? Ebenso
(double)stadt[h].length;
Am Ende ist restzeit immernoch ein int und
stadt[h].length/10 ebenfalls eine Ganzzahl. Außerdem soll die Stunde schon bei der angefangenen 10er Gruppe verrechnet werden.
Das erreichst du am einfachsten mit
restzeit-=(stadt[h].length+9)/10;
| code: |
1:
2:
|
Geschenk [] y= new Geschenk [stadt[h].ausraeumen().length]
y= stadt[h].ausraeumen(); |
|
beim ersten Aufruf von ausraeumen leerst du bereits das Haus und löschst die Geschenke. Folglicht wirst du beim zweiten Ausräumen nichts mehr finden können.
Geschenk [] y= stadt[h].ausraeumen(); ist die offensichtliche Lösung.
Und bei
if(a>=0){ gibt es a nicht mehr.
Geschrieben von neuling96 am 25.12.2014 um 07:49:
| code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
|
public void aufTourGehen() {
int sum=0;
for (int h=0; h< stadt.length; h++) {
sum+=stadt[h].length;
}
Geschenk[]geklauteGeschenke= new Geschenk [sum];
sum=0;
(double)restzeit;
for (int h=0; h< stadt.length; h++){
Geschenk [] y= stadt[h].ausraeumen();
restzeit-=(y.length+9)/10;
if(restzeit>=0){
for int i=0; i<y.length ; i++){
geschenke[i+sum] = y[i];
sum+=y.length;
}
|
|
das müsste so hoffentlich passen
b) ist richtig?
Geschrieben von neuling96 am 25.12.2014 um 07:56:
natürlich muss das double restzeit weg!
Geschrieben von eulerscheZahl am 25.12.2014 um 08:25:
| code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
|
public class Main {
public static void main(String[]args)
{
Haus[] stadt = new Haus[12];
for(int i = 0; i < stadt.length; i++) {
stadt[i] = new Haus();
}
Grinch grinch = new Grinch(stadt, 80);
grinch.aufTourGehen();
}
} |
|
| code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
|
import java.util.Random;
public class Geschenk {
/**
* Das Gewicht des Geschenks in Gramm
*/
public int gewicht;
/**
* Konstruktor für Geschenk:
* Erzeugt ein neues Geschenk mit zufällig gewählter Größe
*/
public Geschenk() {
Random r = new Random();
this.gewicht = r.nextInt(901) + 100; // Zufallszahl zwischen 100 und 1000
}
} |
|
| code: |
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:
|
import java.util.Random;
public class Haus {
private Geschenk[] baum; // Geschenke unter dem Baum
private Geschenk[] schrank; // Geschenke im Schrank
private Geschenk[] tisch; // Geschenke auf dem Tisch
/**
* Konstruktor für Haus:
* Erzeugt ein neues Haus mit zufällig verteilten Geschenken.
*/
public Haus() {
Random r = new Random();
this.baum = new Geschenk[r.nextInt(31)];
for(int i=0;i<this.baum.length;i++) {
this.baum[i] = new Geschenk();
}
this.schrank = new Geschenk[r.nextInt(31)];
for(int i=0;i<this.schrank.length;i++) {
this.schrank[i] = new Geschenk();
}
this.tisch = new Geschenk[r.nextInt(31)];
for(int i=0;i<this.tisch.length;i++) {
this.tisch[i] = new Geschenk();
}
}
public int anzahlGeschenke() {
return baum.length + schrank.length + tisch.length;
}
public Geschenk[] ausraeumen() { //nicht static!
Geschenk[] klau = new Geschenk[baum.length + schrank.length + tisch.length];
for (int i = 0; i < baum.length; i++) {
klau[i] = baum[i];
}
for (int y = 0; y < schrank.length; y++){
klau[y + baum.length] = schrank[y];
}
for (int z = 0; z < tisch.length; z++){
klau[z + schrank.length + baum.length] = tisch[z];
}
baum = null;
schrank = null;
tisch = null;
return klau;
}
} |
|
| code: |
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:
|
public class Grinch {
private Haus[] stadt;
private Geschenk[] geklauteGeschenke = new Geschenk[0];
private int restzeit;
public Grinch(Haus[] stadt, int restzeit) {
this.restzeit = restzeit;
this.stadt = stadt;
}
public void aufTourGehen() {
int sum = 0;
for (int h = 0; h < stadt.length; h++) {
sum += stadt[h].anzahlGeschenke();
}
Geschenk[] geklauteGeschenke = new Geschenk[sum];
sum = 0;
for (int h = 0; h < stadt.length; h++) {
Geschenk [] y = stadt[h].ausraeumen();
restzeit -= (y.length+9)/10;
if(restzeit >= 0) {
for (int i = 0; i < y.length; i++) {
geklauteGeschenke[i+sum] = y[i];
}
sum += y.length;
}
}
}
} |
|
Geschrieben von neuling96 am 26.12.2014 um 02:06:
vielen dank
d.h
for (int h=0; h< stadt.length; h++) {
sum+=stadt[h].length;
ist falsch?
for (int h=0; h< stadt.length; h++){
Geschenk [] y= stadt[h].ausraeumen();
ist auch falsch?
Geschrieben von eulerscheZahl am 26.12.2014 um 08:17:
stadt[h].length existiert nicht, da du length nirgendwo definiert hast. Du musst dir selbst eine Methode schreiben, die die Länge liefert.
Geschenk [] y= stadt[h].ausraeumen(); ist nicht falsch (siehe meine Lösung, Zeile 20 beim Grinch). Du darfst es nur nicht doppelt aufrufen: Die Geschenke werden in y gespeichert und dann aus dem Haus gelöscht. Wenn das Haus keine Geschenke mehr hat und die erneut die Geschenke klauen willst, dann ist da nichts mehr zum Klauen übrig. Du überfällst doch auch nicht 2 mal in 10 Minuten die selbe Sparkassenfiliale.
Forensoftware: Burning Board, entwickelt von WoltLab GmbH