Problem mit allShipsSunk()

http://pp.info.uni-karlsruhe.de/lehre/W ... rn/b03.pdf
horst
Beiträge: 20
Registriert: Di 11. Nov 2008, 21:14

Re: Problem mit allShipsSunk()

Beitrag von horst »

also ich würde eine neue globale variable einführen
shipsOnField
jaja ich weiß globale variable = ganz ganz hässlich
so
und immer wenn ich ein schiff setze dann zählt die variable hoch und zwar um 1-4 und zieht von maxShips das gleiche ab
ausserdem ist maxShips <= der anzahl der zellen
so jetzt zieht man für jeden erfolgreichen bombenabwurf 1 von der neuen variable ab.
und wenn die 0 ist hat man verloren.
das an maxships aufzuhänhgen find ich gelinde gesagt bescheuert, weil man dann ja theoretisch so lange spielen muss bis alle felder bombardiert wurden.

Ich denke nicht das es sinvoll ist ein neues objekt einzuführen, dass schiff heißt...
dann müsste man im extremfall int*int objekte im arbeitsspeicher ablegen...
aber jetzt weiß ich warum vista ein drittel meines arbeitsspeichers frisst....
Christian S.
Beiträge: 225
Registriert: Sa 25. Okt 2008, 12:48

Re: Problem mit allShipsSunk()

Beitrag von Christian S. »

horst hat geschrieben:also ich würde eine neue globale variable einführen
ausserdem ist maxShips <= der anzahl der zellen
Das reicht aber nicht, denn wenn du zwar theoretisch noch genug freie Felder hast, muss das in der Praxis noch lange nicht heißen, dass du Schiffe platzieren kannst.
Ein Beispiel:
X .
. X
Hier sind zwar noch zwei Felder frei, jedoch kannst du kein Schiff mehr platzieren, da diese eine Platzierung von Schiffen nicht zulassen.
horst
Beiträge: 20
Registriert: Di 11. Nov 2008, 21:14

Re: Problem mit allShipsSunk()

Beitrag von horst »

ach steht das irgendwo in der aufgabe?
wir haben unsern tutor dazu gefragt und der meinte es ist nicht gefordert also muss es das programm auch nicht können.
und wenn du jetzt argumentierst das die regeln von schiffe versenken so sind...
im schiffe versenken kann man auch nicht nachträglich noch schiffe einfügen...
markusj
Beiträge: 164
Registriert: Do 23. Okt 2008, 22:07

Re: Problem mit allShipsSunk()

Beitrag von markusj »

horst hat geschrieben:also ich würde eine neue globale variable einführen
shipsOnField
jaja ich weiß globale variable = ganz ganz hässlich
so
Oder du suchst einfach kurz durch dein Array, ob auf allen Positionen, an denen kein Wasser ist, ein Bombenabwurf stattfand.

Und im übrigen: Keine globale Variable, sondern eine private Variable in Spielfeld-Klasse! Das macht einen großen Unterschied, für Prof. Snelting sogar die Welt ...

mfG
Markus
horst
Beiträge: 20
Registriert: Di 11. Nov 2008, 21:14

Re: Problem mit allShipsSunk()

Beitrag von horst »

ok also ich meinte mit globale variable
ne variable in class square{} oder wie auch immer das bei dir heißt...
jedenfalls ist die doch global(zumindest für die klasse) oder nicht???
also das ist keine rhetorische frage sondern ernst gemeint:
private/public regelt doch die zugriffsrechte auf diese variable und
der begriff lokal/global, der ja rein theoretischer natur in java ist bezeichnet doch die lebensdauer im arbeitsspeicher bzw den gültigkeitsbereich im programm???

und meinst du nicht dass es sinvoller ist den wert einer variablen abzufragen, als nen verhältnismäßig aufwendigen test durchzuführen??
markusj
Beiträge: 164
Registriert: Do 23. Okt 2008, 22:07

Re: Problem mit allShipsSunk()

Beitrag von markusj »

Es ist keine globale Variable, weil es sich dabei um ein Attribut handelt, dessen Wert objektspezifisch sein kann.
Lokal bedeutet, dass die Variable nur innerhalb einer Methode "lebt" (und mit verlassen dieser "stirbt").

Und du müsstest dir nicht die Anzahl der verbleibenden Schiffe merken, sondern die Anzahl der noch zu treffenden Felder, damit würde eine Überprüfung auf vollständig versenkte Schiffe entfallen und es wäre noch ne Portion eleganter.

mfG
Markus
lupus
Beiträge: 6
Registriert: Mi 10. Dez 2008, 11:55

Re: Problem mit allShipsSunk()

Beitrag von lupus »

wie wärs, wenn ihr eine variable shipParts einführt und bei jedem Schiff, dass ihr hinzufügt, die Schiffslänge zu dieser Variablen hinzuaddiert... und jedesmal, wenn eine Bombe ein Schiff trifft, zieht ihr einen ab ( shipParts--; ) Solange diese Variable > 0 sind noch Schiffe auf dem Feld :)

Code: Alles auswählen

public Boolean AllShipsSunk() {
if(shipParts>0)
     return false;
return true;
}
so far.
Benutzeravatar
DaVinci
Beiträge: 62
Registriert: Mi 5. Nov 2008, 01:20

Re: Problem mit allShipsSunk()

Beitrag von DaVinci »

array ships durchgehen und jedes mit einem schiff belegte feld auf positiven wert in bombs array vergleichen.
Sobald ein nicht getroffenes Schiff gefunden: "return false;" (return in Schleife, ich weiß … und's ist mir sowas von egal :D )
¿ɯıɥ ssɐɹɹɐqɯǝ ʎɥʍ 'ʇou s,ʇı ɟı — noʎ llǝʇ ll,ǝɥ 'ɔɐɯ ɐ s,ʇı ɟı — sǝsn ǝɥ so ʇɐɥʍ uɐɯ ɐ ʞsɐ ɹǝʌǝu
Sascha
Beiträge: 17
Registriert: Mi 29. Okt 2008, 12:56
Wohnort: 35 min zum HSaF oO

Re: Problem mit allShipsSunk()

Beitrag von Sascha »

DaVinci hat geschrieben:return in Schleife, ich weiß … und's ist mir sowas von egal :D
return geht wohl laut Übungsleiter klar, nur break ist weiterhin als 'böse' deklariert
Benutzeravatar
DaVinci
Beiträge: 62
Registriert: Mi 5. Nov 2008, 01:20

Re: Problem mit allShipsSunk()

Beitrag von DaVinci »

Sascha hat geschrieben:
DaVinci hat geschrieben:return in Schleife, ich weiß … und's ist mir sowas von egal :D
return geht wohl laut Übungsleiter klar, nur break ist weiterhin als 'böse' deklariert
Naja, ein "return" in einer Schleife bricht diese genauso ab, wie es ein "break" tun würde :oops:

Mein Code für Übung 3 enthält: 6 breaks und 2 returns jeweils in der Mitte einer Methode (auf knapp 170 Zeilen) und jeder dieser Fälle wäre ohne ein purer PITA gewesen. :pardon:
¿ɯıɥ ssɐɹɹɐqɯǝ ʎɥʍ 'ʇou s,ʇı ɟı — noʎ llǝʇ ll,ǝɥ 'ɔɐɯ ɐ s,ʇı ɟı — sǝsn ǝɥ so ʇɐɥʍ uɐɯ ɐ ʞsɐ ɹǝʌǝu
Antworten

Zurück zu „Blatt 3 - Abgabe 12.12.08“