Witam,
Ostatnio wziąłem się za naukę C#, czytam książkę "Szkoła Programowania" Klausa Michelsena. Otóż po każdym rozdziale są jakieś pytania i zadania kontrolne z których bardzo fajnie się idzie nauczyć. Niestety utknąłem na tym jednym jedynym zadaniu (akurat którego rozwiązania nie ma na końcu książki).
- Dodaj zmienną instancji do klasy Elevator, aby mogła zawierać nazwę windy.
Można ją nazwać myName. Jakiego typu powinna być ta zmienna instancji? Czy
należy ją zadeklarować jako private czy public? Napisz konstruktor, przy
użyciu którego można zadawać wartość tej zmiennej przy tworzeniu obiektu
Elevator za pomocą new i przypisać go do zmiennej. (Uwaga! Konstruktor jest
metodą i musi mieć taką samą nazwę jak jego klasa. Ten konstruktor w swoim
nagłówku musi mieć parametr formalny typu string). Ustaw wywołanie konstruktora,
kiedy używa się słowa kluczowego new, przez wstawienie nazwy windy
jako argumentu; między nawiasami zamiast new Elevator() wpisz
new Elevator("WindaA").
Za każdym razem gdy Elevator zakończy jazdę, powinien drukować swoją
nazwę razem z opuszczanym piętrem i piętrem docelowym. Innymi słowy, zamiast
drukować
Odjeżdżam z piętra: 2 Jadę na: 24
powinien drukować:
WindaA: Odjeżdżam z piętra: 2 Jadę na: 24
gdzie WindaA jest jego nazwą rezydującą wewnątrz myName.
Kombinowałem na 1000 różnych sposobów, przesiedziałem już z 3h szukając rozwiązania na przeróżnych forach ale niestety nic nie znalazłem. Nie wiem co takiego robię źle. Bardzo prosiłbym o pomoc. A tu proszę mój kod:
// Symulacja Windy
using System;
class Elevator
{
private int currentFloor = 0; //zmienna instancji
private int requestedFloor = 0;
private int totalFloorsTraveled = 0;
private int totalTripsTraveled = 0;
private Person passenger;
/* Moje wypociny - które myślę że są najbliższe rozwiązaniu problemu
*
public Elevator myName;
</li>
</li>
public void Elevator(string myName)
</li>
{
</li>
myName = new Elevator("WindaA");
</li>
}
*/
public void LoadPassenger()
{
passenger = new Person();
}
public void InitiateNewFloorRequest()
{
requestedFloor = passenger.NewFloorRequest();
Console.WriteLine("Odjeżdzam z piętra: " + currentFloor + " Jadę na " + requestedFloor);
totalFloorsTraveled = totalFloorsTraveled + Math.Abs(currentFloor - requestedFloor);
currentFloor = requestedFloor;
totalTripsTraveled = totalTripsTraveled + 1;
}
public void ReportStatistic()
{
Console.WriteLine("Ilość przebytych pięter: " + totalFloorsTraveled);
Console.WriteLine("Ilość jazd windy: " + totalTripsTraveled); // Ilość jazd jakie wykonuje winda
}
}
</li>
</ul>
class Person
{
private System.Random randomNumberGenerator;
public Person()
{
randomNumberGenerator = new System.Random();
}
public int NewFloorRequest()
{
return randomNumberGenerator.Next(1,50); //Zwróc losowo wygenerowaną liczbę
}
}
class Building
{
private static Elevator elevatorA;
public static void Main()
{
Console.WriteLine("Zaczęła się symulacja");
elevatorA = new Elevator();
elevatorA.LoadPassenger();
elevatorA.InitiateNewFloorRequest();
elevatorA.InitiateNewFloorRequest();
elevatorA.InitiateNewFloorRequest();
elevatorA.InitiateNewFloorRequest();
elevatorA.InitiateNewFloorRequest();
elevatorA.InitiateNewFloorRequest();
elevatorA.InitiateNewFloorRequest();
elevatorA.InitiateNewFloorRequest();
elevatorA.InitiateNewFloorRequest();
elevatorA.InitiateNewFloorRequest();
elevatorA.ReportStatistic();
Console.WriteLine("Symulacja skończyła się");
}
}