• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

C# - konstruktory o tych samych argumentach

Object Storage Arubacloud
+1 głos
505 wizyt
pytanie zadane 12 sierpnia 2019 w C# przez moringnewbie Nowicjusz (180 p.)

Dzień dobry.

Uczę się programowania w C#. Przerabiam właśnie książkę Marcina Lisa "C# Praktyczny kurs" wyd. Helion.

Szukam podpowiedzi do zadania dotyczącego konstruktorów.

Treść zadania:

Napisz klasę Kwadrat przechowującą informację o kwadracie. Klasa powinna mieć konstruktory umożliwiające przekazanie parametrów o następujących znaczeniach:

a) współrzędne lewego górnego rogu oraz prawego dolnego 

b) współrzędne lewego górnego rogu oraz długość boku

c) współrzędne środka i długość boku

d) współrzędne środka i pole

Mam problem z podpunktem c) i d). Utknąłem na tym, że nie mogę dodać kolejnego konstruktora o tych samych argumentach. W podpunkcie c) chciałbym użyć jako argumentów tablicy int jako współrzędne środka oraz int jako długość boku. W podpunkcie d) analogicznie. 

Jestem świadom, że konstruktorów może być więcej, ale muszą różnić się rodzajem argumentów.

Proszę o podpowiedź - nie rozwiązanie ;)

Wszelkie inne uwagi mile widziane - pewnie sporo powinienem mieć na sumieniu ;)

*Pewnie powinienem użyć typów zmiennoprzecinkowych zamiast int bo przecież punkty czy wymiar kwadratu nie musi być liczbą całkowitą, ale tutaj chodzi mi raczej o przećwiczenie działania konstruktorów.

 

klasa Kwadrat:

using System;

namespace ConsoleApp19
{
    public class Kwadrat
    {
        /*
         LD - lewy dolny róg
         PD - prawy dolny róg
         PG - prawy górny róg
         LG - lewy górny róg
         SR - środek kwadratu
        */
        public int[] LD = new int[2];   
        public int[] PD = new int[2];
        public int[] PG = new int[2];
        public int[] LG = new int[2];
        public int[] SR = new int[2];

        public Kwadrat(int[] LG, int[] PD)
        {
            this.LG = LG;
            this.PD = PD;
            LD[0] = LG[0];
            LD[1] = PD[1];
            PG[0] = PD[0];
            PG[1] = LG[1];
        }
        public Kwadrat(int[] LG, int dlugosc)
        {
            LD[0] = LG[0];
            LD[1] = LG[1] - dlugosc;
            PD[0] = LD[0] + dlugosc;
            PD[1] = LD[1];
            PG[0] = PD[0];
            PG[1] = LG[1];
            this.LG[0] = LG[0];
            this.LG[1] = LG[1];
        }

        //public Kwadrat(int[] SR, int dlugosc)
        //{

        //}

        public void wyswietl()
        {
            Console.WriteLine(LD[0] + " " + LD[1]);
            Console.WriteLine(PD[0] + " " + PD[1]);
            Console.WriteLine(PG[0] + " " + PG[1]);
            Console.WriteLine(LG[0] + " " + LG[1]);
        }
    }
}

 

klasa Program:

using System;

namespace ConsoleApp19
{
    class Program
    {
        public static void Main()
        {
            int[] lewygora = new int[2] { 1, 3 };
            int[] prawydol = new int[2] { 3, 1 };
            int x = 2;

            Kwadrat kwadrat1 = new Kwadrat(lewygora, prawydol);
            kwadrat1.wyswietl();
            Console.WriteLine();

            Kwadrat kwadrat2 = new Kwadrat(lewygora, x);
            kwadrat2.wyswietl();
            Console.WriteLine();



            Console.ReadKey();
        }
    }
}

 

Pozdrawiam!

 

komentarz 12 sierpnia 2019 przez Paweł Nąckiewicz Nałogowiec (48,990 p.)
Dobre pytanie, może po prostu  zamień kolejność argumentów.. ale to prowizoryczne pseudorozwiązanie.
1
komentarz 12 sierpnia 2019 przez Siemił Mądrala (7,380 p.)

@moringnewbie, Cześć. Podejrzewam że dopiero się uczysz podstaw, więc mam kilka wskazówek.

1. Pamiętaj że wszystko może być obiektem. Zamiast używać tablic możesz stworzyć stworzyć klasę 'Punkt' która będzie przechowywała wsp X i Y.

2. Jak piszesz nazwy pól to staraj się używać nazw, do których nie musisz pisać komentarzy. Łatwiej wtedy czytać kod. 

3. Aby rozwiązać twoje zadanie dodał bym pole do klasy 'Punkt', które wskazywał by na konkretny punkt. Wtedy wystarczyłby jeden konstruktor.

 

komentarz 12 sierpnia 2019 przez moringnewbie Nowicjusz (180 p.)
Dziękuję za rady.

Tak, zaczynam zabawę. Póki co wiem, że gdzieś dzwoni, ale nie bardzo w którym kościele ;) Czytam i robię zadania na bieżąco, póki co nie miałem większych problemów. To zadanie jest ostatnim z serii, więc można się było spodziewać, że jest jakiś haczyk jak w każdym ostatnim.

Ad.1 - faktycznie, nie pomyślałem o tym.

Ad.2 - poprawię.

Ad.3 - mógłbyś lekko rozwinąć?

 

Kurde, mieszam się, dalej to nie rozwiązuje problemu..

Po wprowadzeniu zmian przykładowe argumenty wyglądają tak:

a) współrzędne lewego górnego rogu oraz prawego dolnego --- (Point point, Point point)

b) współrzędne lewego górnego rogu oraz długość boku --- (Point point, int sideLength)

c) współrzędne środka i długość boku --- (Point point, int sideLength)

d) współrzędne środka i pole --- (Point point, int field)

.. czyli znów się powtarzają.

 

Rozwiązałem to zadanie "na siłę" czyli zamieniałem kolejność argumentów, używałem jako argument obiektów klasy Punkt i tablicy ze współrzędnymi, int'ów i jeszcze jednej klasy, czyli jednym słowem misz-masz.. ale działa. Warunki zadania są spełnione, ale to nie zadowala, muszę znaleźć sposób na rozwiązanie tego zadania porządnie.

Pokombinuje jeszcze i czytam dalej, najwyżej za jakiś czas wrócę do zadania ze świeżą głową.

 

Pozdrawiam!
komentarz 12 sierpnia 2019 przez Siemił Mądrala (7,380 p.)
Idz do przodu. Czasami trzeba czasu aby cos zrozumiec.

Jeśli chodzi o 3. Stworz sobie enum RodzajPunktu. A w nim takie stale jak Srodek, GornyLewy, GornyPrawy ... Itd. Masz klase Punkt, ktora ma pola int X, Y. Dodaj do niej pole typu RodzajPunktu. Zadanie rozwiazuje 1 konstruktor ktory przyjmuje dwa parametry typu Punkt. np. new Punkt{X =..., Y=..., RodzajPunktu = RodzajPunktu.Srodek}.

 

Powodzenia.
komentarz 12 sierpnia 2019 przez moringnewbie Nowicjusz (180 p.)
Wrócę do zadania. Nie doszedłem jeszcze do enum i stałych. Na szybko przeczytałem z czym to się je. Jak przerobie dokładnie te zagadnienia to wrócę.

Dziękuję za pomoc i porady!

Pozdrawiam.

1 odpowiedź

–1 głos
odpowiedź 18 sierpnia 2019 przez Maciej Złotorowicz Gaduła (4,230 p.)

Wydaje mi się że dobrym rozwiązaniem będzie stworzenie statycznych metod jako konstruktory coś ala:
 

class A{
        private A()
        {
            //stuff
        }
        static public A konstruktor1(int a){
              var buf = new A();
              //buf.cos = parametry
              return buf
        }
        static public A konstruktor2(int b){
              var buf = new A();
              //buf.cos = parametry
              return buf
        }
}

Wtedy Kod może wyglądać tak:
 

var Klasa = A.konstruktor1(1);
var Klasa2 = A.konstruktor2(2);

Podobne pytania

0 głosów
1 odpowiedź 500 wizyt
pytanie zadane 19 listopada 2020 w C# przez Muzykowy Nowicjusz (120 p.)
0 głosów
1 odpowiedź 385 wizyt
pytanie zadane 26 września 2018 w C i C++ przez jjanickij Użytkownik (510 p.)
0 głosów
0 odpowiedzi 148 wizyt
pytanie zadane 25 sierpnia 2019 w C# przez Moras Obywatel (1,620 p.)

92,568 zapytań

141,420 odpowiedzi

319,620 komentarzy

61,954 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...