Wątek przeniesiony 2016-07-12 11:43 z C# i .NET przez ŁF.

Metoda new. Ustawienie nazwy obiektu za pomocą konstruktora.

0

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).

  1. 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ę");
}

}

0

A dlaczego nie po prostu

 
class Elevator 
{
    private int currentFloor = 0; //zmienna instancji
    private int requestedFloor = 0;
    private int totalFloorsTraveled = 0;
    private int totalTripsTraveled = 0;
    private Person passenger;
 
//
    private string myName;
    
    public Elevator(string myName)
    {
        this.myName = myName;
    }
//
 
    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(myName + ": Ilość przebytych pięter: " + totalFloorsTraveled);
        Console.WriteLine("Ilość jazd windy: " + totalTripsTraveled); // Ilość jazd jakie wykonuje winda
    }
}
 
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("nazwa windy");
        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ę");
    }
} 

Btw, ale te zadania mają pokręcone treści.

0

Jeszcze na "this" w książce się nie natknąłem. Mógłbyś proszę mi tylko wytłumaczyć dlaczego akurat to jest jako private? :)

0

Oczywiście bardzo dziękuję za pomoc ;)

error CS0542: „Elevator”: nazwy członków i odpowiadających im typów otaczających nie mogą być takie same.

Niestety nadal wyskakuje mi ten sam błąd ;/

0
public void Elevator(string myName)
{
     this.myName = myName;
} 

Tam nie powinno być tego void.

0

Dzięki wielkie. Wszystko teraz działa :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1