Verschönerung

Status
Nicht offen für weitere Antworten.

Nicer

Bekanntes Mitglied
Hallo ;)

da ich in meinen Hausaufgaben immer alles sehr schön und vorallem ausgeklügelt und spektakulär machen will frage ich nun mal noch euch ob euch vllt noch was einfällt was man verschönern könnte. Das programm funkt so einwandfrei , die ausgabenstellung ist auch erfüllt ;) ... und Ja , wir arbeiten grade mit dem Hamstersimulator

Java:
void LaufBisMauer() {
while(vornFrei()) {
vor();
}
}

void rechtsUm() {
for(int umdrehungen=3; umdrehungen>=1; umdrehungen --) {
linksUm();
}
}

void FrissAlles(){
while(kornDa()){
nimm();
}
}

void LaufeBisZumErstenKorn(){
LaufBisMauer(); 
rechtsUm();
FrissAlles();
vor();
rechtsUm();
}

void main() {
LaufeBisZumErstenKorn();
while(vornFrei()){
if(vornFrei()){
vor();
}
FrissAlles();
linksUm();
if(vornFrei()){
vor();
}
rechtsUm();
}
}

Freue mich auf euere Vorschläge
 
S

SlaterB

Gast
- Formatierung, Einrückung?
- ersten Buchstaben von Methoden klein schreiben

- wieso steht bei LaufeBisZumErstenKorn nur einmal FrissAlles(); und zwar genau nach der einen Rechtsdrehung,
ist denn gesichtert dass an dieser Stelle irgendwas liegt?, soll nicht eher überall alles abgesucht werden?
wieso danach noch Bewegung und am Ende eine Drehung?

- wieso steht in der main
> while(vornFrei()){
> if(vornFrei()){
> vor();
> }
erstens gibts schon extra ne Methode die das machen kann, zweitens ist die auch besser implementiert,
das if innerhalb der while ist nämlich überflüssig

- Zeile 33 bis 38 sind auch fraglich
 

Nicer

Bekanntes Mitglied
Ya es ist gesichert das da was liegt , es gibt ein Vorgegebenes Territorium ;)

und die If in der While ist dafür da dass er noch einmal vor dem vor(); prüft ob frei is , den ansonsten rennt er unten bei ungeraden quadratgrößen also 11x11 odda so an die mauer. Die Funktion gibts , aber wir haben die nochnet durchgenommen und wir dürfen nur sachen benutzen die wir bisher gelernt hatten ;)

MfG Nicer
 
Zuletzt bearbeitet:
S

SlaterB

Gast
aber die while-Bedingung stellt doch schon sicher, dass es frei ist,
wenn dem nicht so wäre, müsstest du ja in
Java:
void LaufBisMauer() {
  while(vornFrei()) {
    vor();
  }
}
auch das if einbauen, entweder oder, zwei unterschiedliche Version ist das schlechtest-mögliche,
zwei gleiche Versionen sind auch noch eher schlecht,
am besten nur eine Version und von der main-Methode die andere Methode aufrufen statt den Code zu wiederholen

------

> Ya es ist gesichert das da was liegt , es gibt ein Vorgegebenes Territorium

kann man so lassen, aber du weißt eigentlich zu Beginn der Untermethode gar nicht, wo sich der Hamster befindet,
darf nur von einer bestimmten Menge Positionen aus aufgerufen werden, unschön
 

Nicer

Bekanntes Mitglied
Ja aber das problem liegt ja dass er :

checkt ob frei is
alle anweisungen macht

checkt ob frei is
alle anweisungen macht
usw...

er soll aber vorm vorgehen nochmal schauen dasses frei is denn ansonsten läuft er wiegesagt bei ungeraden Quadratgrößen wie 11x11 gegen die mauer.

edit :

ich lasse dem hamster erst nach oben laufen , ich bin grade dran ihn nach oben links laufen zu lassen dass er auf jeden fall im linken oberen eck steht.
 
Zuletzt bearbeitet:
S

SlaterB

Gast
gut dass du nochmal dasselbe wiederholt hast,
ich kann dir nur versichern, dass das so falsch ist, alles weitere musst du selber entscheiden, wenigstens ausprobieren (ob es z.B. je zu diesem Problem kommt)
 

Nicer

Bekanntes Mitglied
"falsch" ist es sicher nicht denn es funktioniert so zu 100% ... aber naja danke für deine Hinweise , ich setz mich heute nochmal dran mal schauen was da bei rauskommt ;)
 
S

SlaterB

Gast
stimmt, falsch im Sinne von unnötig, Schaden macht es nicht
 

Nicer

Bekanntes Mitglied
so ich hab das mal so gemacht wie dus geschrieben hast also ohne die if in der while und das kommt dabei raus :

errorzw.png


Java:
void main() { // Hauptprozedur
 laufeBisZumErstenKorn();
  while(vornFrei()){ // While Schleife die alles einsammelt
    vor();         
   
  frissAlles();
  linksUm();
    vor();         
  rechtsUm();
 }
}

so habbichs gemacht , habbich nu was falsch gemacht ? wenn das hier das ist wie du meinst dann funtzt das nich ...

edit :
das problem ist dass ich 2x vor in der while mache und dasser vor dem 2ten vor nicht schaut ob vorn frei ist. das erste mal könnte ich es weglassen aber vorm 2ten mal MUSS ich es machen ansonsten rennt er mir gegen die mauer
 
S

SlaterB

Gast
beim zweiten Mal gerne, hatte die while-Schleife zusammen mit dem ersten vor() als eine Einheit gesehen,
so ist auch mein Punkt 'wieso nicht LaufBisMauer() aufrufen?' Geschichte, durch den längeren while-Block ist das ja eine neue struktor
 

Nicer

Bekanntes Mitglied
Yop , ich hab nu die erste if rausgenommen, weil ja direkt vor dem vor gecheckt wird ob vorne frei ist , aber vorm 2ten mussichs lassen ;)

aber vielen dank für deine Hilfe ^^

edit :

mein fertiger code sieht nun so aus :

Java:
/*
* ----------------------------------------------------------------------------
* "THE BEER-WARE LICENSE" (Revision 42):
* XXXXXX XXXXXX schrieb diese Datei. Solange Sie diesen Vermerk nicht entfernen,
* können Sie mit der Datei machen, was Sie möchten. Wenn wir uns eines Tages treffen
* und Sie denken, die Datei ist es wert, können Sie mir dafür ein Bier ausgeben. Poul-Henning Kamp
* ----------------------------------------------------------------------------
*/



private void laufBisMauer() { // Prozedur zum Laufen bis zur nächsten Mauer
 while(vornFrei()) {
  vor();
 }
}

private void rechtsUm() { // Prozedur um den Hamster nach Rechts zu drehen
 for(int linksdrehung=3; linksdrehung>=1;linksdrehung --) {
  linksUm();
 }
}

private void frissAlles() { // Prozedur um alle Körner zu fressen
 while(kornDa()){
  nimm();
 }
}

private void umdrehen() { // Prozedur um den Hamster umzudrehen
 for(int umdrehungen=2; umdrehungen>=1; umdrehungen --) {
  linksUm();
 }
}

private void laufeBisZumErstenKorn() { // Prozedur zum Laufen bis zum ersten Korn ( zur verschönerung der void main )
 laufBisMauer(); // Sicherstellen dass der
 linksUm();      // Hamster oben links
 laufBisMauer(); // Steht
 umdrehen();
 frissAlles();
 vor();
 rechtsUm();
}

void main() { // Hauptprozedur
 laufeBisZumErstenKorn();
  while(vornFrei()){ // While Schleife die alles einsammelt
   vor();
   frissAlles();
   linksUm();
    if(vornFrei()){ // Check dass der Hamster bei ungeraden Territorium Längen und Breiten ( z.B. 11x11 ) 
     vor();          // nicht gegen die wand rennt
    }
   rechtsUm();
  }
}
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben