Przekazywanie tablicy jako parametr do konstruktora

0

public class NOWA_FIGURA{

public int [][] Trojkaty_czerwone;
    public int [][] Trojkaty_zielone;
    public int [][] Trojkaty_niebieskie;

    public string Nazwa_figury;

    public NOWA_FIGURA(int [][] czerwone, int [][] zielone, int [][] niebieskie){

        Trojkaty_czerwone = new int[czerwone.Length][];
        Trojkaty_zielone = new int[zielone.Length][];
        Trojkaty_niebieskie = new int[niebieskie.Length][];

        for(int i = 0; i < czerwone.Length; i++){
            Trojkaty_czerwone[i] = new int [2];
            Trojkaty_czerwone[i][0] = czerwone[i][0];
            Trojkaty_czerwone[i][1] = czerwone[i][1];
        }

        for(int i = 0; i < zielone.Length; i++){
            Trojkaty_zielone[i] = new int [2];
            Trojkaty_zielone[i][0] = zielone[i][0];
            Trojkaty_zielone[i][1] = zielone[i][1];
        }

        for(int i = 0; i < niebieskie.Length; i++){
            Trojkaty_niebieskie[i] = new int [2];
            Trojkaty_niebieskie[i][0] = niebieskie[i][0];
            Trojkaty_niebieskie[i][1] = niebieskie[i][1];
        }

    }

}

Witam. Czy mógłbym mając długą tablice w formie {{},{},...}
wstawic ją przy tworzeniu obiektu klasy powyżej jako parametr konstruktora?

public NOWA_FIGURA trojkat({{2,2},{1,1},{3,3}} , {{2,2},{1,1},{3,3}} , {{2,2},{1,1},{3,3}});

Nie bardzo chce mi to bowiem działać, natomiast jeżeli nie to przynajmniej czy nie dałoby się zrobic czegoś w stylu:

trojkat.Trojkaty_czerwone = new int{ {2,2},{1,1},{3,3}};  

Zależy mi na użyciu {{},{},{},{}...} dziękuje

0
  1. Wierzchołki trójkąta to punkty, użyj punktu zamiast pary intów -> https://msdn.microsoft.com/en[...]dows.point%28v=vs.110%29.aspx
  2. Opowiedz co chcesz zrobić, bo kod nie jest najlepszy jak na C#. Napisz kod tak jakbyś opowiedział o tym programie.
    Jeden trójkąt ma 3 wierzchołki, każdy z wierzchołków jest punktem.
    Nowa figura posiada 3 kolekcje Trójkątów

Edit, a co do samego problemu ze składnia to każda z klas powinna mieć jedno zadanie do wykonania, napisz klasę, która będzie umiała przyjąć dane w takim formacie (jeśli np. wczytujesz je z pliku) i zwrócić Ci odpowiednie obiekty.

0
    class Point
    {
        public int X { get; set; }
        public int Y { get; set; }

        public Point(int x, int y)
        {
            X = x;
            Y = y;
        }
    }

    class Triangle
    {
        public Point A { get; set; }
        public Point B { get; set; }
        public Point C { get; set; }
    }

A potem nowy trójkąt możesz stworzyć tak:

            var redtriangle = new Triangle
                              {
                                  A = new Point(1, 2),
                                  B = new Point(3, 4),
                                  C = new Point(5, 6)
                              };

Edit, a zamiast kombinować z "miejsce w jakiejs innej tablicy dwu-wymiarowej," to przekaż referencję.

0

public class NOWY_OBIEKT{
    public int [][] Tablica_tablic;

    public NOWY_OBIEKT(int [][] tablica){

        Tablica_tablic = new int[tablica.Length][];

        for(int i = 0; i < tablica.Length; i++){
            Tablica_tablic[i] = new int [2];
            Tablica_tablic[i][0] = tablica[i][0];
            Tablica_tablic[i][1] = tablica[i][1];
        }

    }

}

I teraz wszystko czego jak pragnę to żeby tworząc obiekt:


NOWY_OBIEKT = obiekt( {{1,23},{3,4},{5,6},{2,3},{1,6},{23,1},{6,2}})

to żeby przy tworzeniu nowego obiektu w konstruktorze wstawić jako parametr tablice która jest zapisana w postaci takich nawiasów {{1,23},{3,4},{5,6},{2,3},{1,6},{23,1},{6,2}} albo chociaz żeby była jednowymiarowa {1,2,3,4,64,3,4,5,43}, ale chce taką tablice wypisać jako parametr do konstruktora przy tworzeniu obiektu i wyskakuje tam błąd.

1

Nie da się bo nie ma takiej składni, da się parsować to co wpisze użytkownik i budować z tego obiekty (j/w).
Składnia najbliżej tego co szukasz to:

            var nowaFigura = StworzNowaFigure(new[]
                                     {
                                         new []{1,2},
                                         new []{3,4},
                                         new []{5,6}
                                     });
        private static NowaFigura StworzNowaFigure(int[][] args)
        {
            //tutaj kod tworzący figurę
        }
1

Jest możliwe użycie takiej składni jakiej chcesz
Wystarczy żeby obiekt dziedziczył z IEnumerable i zawierał metodę Add

    class Figura : IEnumerable<int[]>
    {
        List<int[]> wierzcholki = new List<int[]>();

        public void Add(int x, int y)
        {
            wierzcholki.Add(new[] { x, y });
        }

        public IEnumerator<int[]> GetEnumerator()
        {
            return wierzcholki.GetEnumerator();
        }

        System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
        {
            return wierzcholki.GetEnumerator();
        }
    }

Możesz wtedy użyć collection initializera i napisać tak:

var figura = new Figura { { 1, 2 }, { 3, 4 }, { 5, 6 } };

Dużo ładniej by było jednak gdybyś zamiast tablic użył wyspecjalizowanych obiektów

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