Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

16.12.2018, 09:55

Kleines Problem

Hallo,

Ich arbeite gerade an einen kleinem Minispiel. Es geht um einen Menschen und sein Auto. Nichts Besonderes! Und außerdem ist es rein Text-based. Nun ist das Problem, dass ich bei der Klasse »Auto/ Car« einen Preis reinprogrammiert habe. Ich möchte jetzt bei »Besitzer/Owner« nun eine Methode namens buyCar programmieren. Jedoch hab’ ich keine Ahnung wie man es so prgrammiert, dass das Programm erkennt das Car1 (also das erzeugte Objekt) = myCar (bei Besitzer) ist. Habt ihr da eine Idee?

P.S.: Ich benutzte derzeit BlueJ.

2

16.12.2018, 14:48

Meinst du sowas?

C-/C++-Quelltext

1
2
3
4
Car myCar("Ford Mustang");
Besitzer hans();

hans.buyCar(myCar);

-------------------------

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
class Besitzer
{
   private Car _myCar;
   void buyCar(Car c)
   {
      _myCar = c;
      //Logik
   }
}

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

3

16.12.2018, 15:43

An sich musst du dir überlegen wie du den Besitz abbilden möchtest. Der Besitzer könnte ein Attribut für sein Auto haben, möglicherweise auch eine Liste davon, oder das Auto kennt seinen Besitzer. Die Methode muss jetzt dafür sorgen dass der Besitz passend gesetzt wird. Ein kleines Beispiel als Pseudocode:

Quellcode

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
class Car {
  var price;
  var owner;
  
  constructor(price) {
    this.price = price;
    this.owner = NULL;
  }
}

class Person {
  var money;

  constructor(money) {
    this.money = money;
  }

  buy_car(car) {
    if(car.owner != NULL) {
      // Das Auto gehört bereits jemandem
    } else if(car.price > this.money) {
      // Zu wenig Geld um das Auto zu kaufen
    } else {
      // Das Auto kann gekauft werden:
      this.money -= car.price; // Der Kaufpreis wird vom Geld des neuen Besitzers abgezogen
      car.owner = this; // Der neue Besitzer wird als Besitzer des Autos eingetragen
    }
  }
}

In diesem Fall wird der Besitzer als solcher im Auto gespeichert. Der Code soll nur als Beispiel dienen. Wie gesagt, könnte ein Besitzer auch eine Liste seiner Autos besitzen. In meinem Fall kann ein Auto auch nur gekauft werden wenn es noch niemandem gehört. An sich könnte man das ganze so gestalten dass Autos auch gebraucht gekauft werden können, es also schon einen Besitzer gibt. Ich denke das Prinzip sollte aber erst mal klar werden.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

4

16.12.2018, 16:30

@Schorsch Nette Idee. Ich hätte gerne etwas einfachers, wenns mögliche wäre. Denn: Ich bin ein blutiger Anfänger. Außerdem ist die Rechnung für das Geld bei mir money = money + pSum.
Wäre Super, wenn du mir etwas einfachers gäbest als Code. Ok?

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

5

16.12.2018, 17:14

Du kannst dir das doch da raus ziehen. Du hast eine Klasse für ein Auto und eine Klasse für einen Besitzer. Das Auto kann den Besitzer speichern. Am Anfang ist der Besitzer des Autos NULL, oder NIL. Ich weiß nicht welche Sprache du genau verwendest, aber der Besitzer wird quasi auf nichts gesetzt. Kauft jetzt jemand das Auto so verrechnest du passend das Geld und Speicherst den Besitzer im Auto ab. Wenn du dir meine buy Funktion ansiehst dann siehst du dass genau das passiert. Dort steht car.owner = this was soviel bedeutet wie, setze das Attribut owner von der Instanz mit dem Namen car welche der Funktion ja als Parameter übergeben wurde, auf this. This bedeutet in dem Fall das selbe Objekt aus welchem die Funktion aufgerufen wird, also in dem Fall der neue Besitzer. Wichtig bei dem Ansatz ist an sich dass du am Ende sowas hast:

Quellcode

1
autoInstanz.besitzer = besitzerInstanz

Dann kennt das Auto den neuen Besitzer. Soweit klar? Ansonsten sag mal dazu welche Sprache du verwendest und zeig mal wie dein aktueller Versuch dazu aussieht.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

6

16.12.2018, 18:21

@Schorsch Ich benutzte Java. Und als Programm BlueJ

7

16.12.2018, 18:45

Wäre es nicht sinnvoller sich einfach mal die Basics zu Klassen bzw. generell Java anzuschauen?

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

8

16.12.2018, 18:45

Hast du es denn jetzt soweit verstanden und konntest dein Problem lösen? Falls nicht, was verstehst du noch nicht und wo genau liegen die Problem?
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

9

20.12.2018, 20:44

@Schorsch Mein Informatiklehrer hat mir den Tipp gegeben:

Im Konstrukter (bei Java): MyCar = null

Und in der buy-Methode:

public double buyCar() {
money -= pPrice
myCar = pCar
}

Aber danke für die Vorschläge.

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

10

20.12.2018, 21:21

So wie du den Code hier geschrieben hast wird dein Programm aber nicht kompilieren. Es ergeben sich folgende Probleme:
MyCar ist nicht das selbe wie myCar. Dein Attribut in der Klasse muss genau so heißen wie der Wert den du im Konstruktor setzt und wie das was du in der Funktion buyCar benutzt. Ich vermute hier hast du dich einfach nur vertippt. Deine Methode buyCar benutzt pPrice und pCar, wo kommen die her? Normalerweise würdest du die vermutlich als Parameter der Funktion übergeben wollen. Deine Funktion buyCar soll einen double-Wert zurück geben, gibt aber in diesem Fall überhaupt nichts zurück. Ich denke hier möchtest du eigentlich dass die Funktion nichts zurück gibt.
Ansonsten gibt es noch eine kleine Verbesserung. Was wäre wenn der gewollte Besitzer weniger Geld hat als das Auto kostet? In deinem Fall wäre money danach ein negativer Wert. Der neue Besitzer würde sich also verschulden. Wenn das so gewollt ist ist alles gut. Ansonsten könntest du in der Funktion vorher abfragen ob überhaupt genug Geld vorhanden ist und nur dann "kaufen", also Geld abziehen und das neue Auto in myCar speichern, wenn genug Geld vorhanden war.
Ansonsten ist ein Informatiklehrer natürlich immer eine super Adresse für Probleme :) Der weiß vermutlich eher was du kannst und kann dir dadurch schon mal ganz gut helfen. Und natürlich sieht er dadurch auch dass du dich privat mit der Entwicklung beschäftigst, was sich sicher ganz gut machen wird :)
Wenn du möchtest kannst du hier auch gerne mal den gesamten Code davon posten und ich/wir gucken mal über deine Lösung. Ob du unsere Verbesserungsvorschläge dann umsetzen möchtest ist ja eine andere Sache aber mit Sicherheit kannst du noch ein paar Dinge dazu lernen.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Werbeanzeige