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

Nie wypisuje z tablicy

+1 głos
113 wizyt
pytanie zadane 16 kwietnia 2021 w C# przez Philo-Tech Nowicjusz (130 p.)
using System;

namespace ConsoleApp1
{
    class Osoba
    {
        internal string name;
        public string nazwisko;
        short wzrost; // czyli domyślnie "private"
        protected float waga; // jeżeli nie wystąpi dziedziczenie to zadziała jak "private"
        private bool kobieta;

        public void wypisz()
        {
            Console.WriteLine("Osoba {4}, {0} {1}, mierzy {2} cm wzrostu i waży {3}", name, nazwisko, wzrost, waga, kobieta ? "Kobieta" : "Mężczyzna");
        }

        
    }

    class Grupa
    {
        public const int MAX_LICZEBNOSC = 24;
        public static readonly int min_liczebnosc = 10;// zamiast 10 można wstawić wyreżenie ze zmienną, ponieważ to "readonly"   = liczba_grup>5? 15:10
        public string nazwma = "NONAME";
        public static int liczba_grup;
        public Osoba[] czlonkowie_grupy;

        public void dodaj_osobe(Osoba osoba, int pozycja)
        {
            czlonkowie_grupy[pozycja] = osoba;

        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Osoba osoba1;
            osoba1 = new Osoba();

            osoba1.name = "Tomek";
            osoba1.nazwisko = "atomek"; 
            //Console.Write("Nowa osoba ma na imię: {0} i nazwisko {1}", osoba1.name, osoba1.nazwisko);

            Osoba osoba2 = new Osoba { name = "Mirek", nazwisko = "Jakiś" };

            Grupa g1 = new Grupa();
            g1.czlonkowie_grupy = new Osoba[] { osoba1, osoba2 };

            Grupa g2 = new Grupa();
            g2.czlonkowie_grupy = new Osoba[2];

            g2.dodaj_osobe(osoba1, 0);
            Osoba osoba4 = new Osoba();
            osoba4.wypisz();
            osoba4 = g2.czlonkowie_grupy[0];

            Console.WriteLine("wypisanie wstawionej osoby {0} {1}", g2.czlonkowie_grupy, osoba4); // ?????????????????????????????????

            foreach (var ktos in g1.czlonkowie_grupy)
                //Console.WriteLine("{0} {1}", ktos.name, ktos.nazwisko);
                ktos.wypisz();
        }
    }
}

Nie wiem dlaczego nie chce mi wypisać:

Console.WriteLine("wypisanie wstawionej osoby {0} {1}", g2.czlonkowie_grupy, osoba4);

Ktoś coś? Mam pierwszy dzień z C#...

Z góry dziękuję i pozdrawiam Mirka i jego mafię też ;)

1
komentarz 16 kwietnia 2021 przez DarthMazut Bywalec (2,990 p.)

Jeśli używasz C# 6.0 lub nowszego proponuję korzystać z interpolacji stringów:

https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/tokens/interpolated

unikniesz tego typu problemów.

komentarz 16 kwietnia 2021 przez Philo-Tech Nowicjusz (130 p.)
Dziękuję za odpowiedź.

Też próbowałem z "$" przed i też nie wypisywało...

Spróbuję jeszcze raz(doczytam z linku) i jak nie wypisze, to wrócę. Swoją drogą ciekawy ten C# (partial class, out, params...)

P.s.

Tak przy okazji; po co jest konstruktor statyczny? Ja widzę sens np. w zapisaniu daty pierwszego odpalenia danej klasy. Jest jakiś inny sens tego "tworu"?

2 odpowiedzi

0 głosów
odpowiedź 17 kwietnia 2021 przez tomasz12345 Użytkownik (750 p.)

Twoje problemy :

1. g2.czlonkowie_grupy - nie wypisuje się

2. osoba4 - nie wypisuje się

Rozwiązanie

1. W języku C# nie wypiszesz tablicy podając jej nazwę, tak się da bodajże w pythonie, mogłbys nadpisać metodę toString() lub po prostu napisać takie coś

string[] array = new string[5];
            
                array[0] = "jarek";
                array[1] = "ola";
                array[2] = "marcel";
                array[3] = "iwona";

            

            for (int i = 0; i < array.Length; i++)
            {
                Console.WriteLine(array[i]);
            }

2. jeśli chodzi o drugi problem, to w klasie Osoba musisz nadpisać metodę toString() , przykładowo tak

public override string ToString()
        {
            return $"name: {name}, nazwisko : {nazwisko}";
        }

oczywiście nie wypisałem wszsytkich parametrów z klasy Osoba, ale mniej więcej tak to działa

 

dodatkowo: jeśli piszesz Console.Writeline() to w nawiasie pisz przykładowo ("These are my variables :  " + var1 + var2) albo stosuj interpolację jak napisał kolega wyżej , nie oddziela się zmiennych przecinkami w c#

statyczne pliki często są plikami konfiguracyjnymi, inicializują się raz w momencie odpalenia programu( np. załóżmy, że piszesz prostą apkę do dodawania osób na listę gości na imprezę, to w momencie utworzenia danego obiektu mozesz przypisać obecną datę a potem użyć jej np. w wyświetlaniu kiedy dana osoba została zapisana. Oczywiście ich zastosowanie jest napewno szersze, jednak jestem początkujący w tej technologii :)

pozdro !

0 głosów
odpowiedź 17 kwietnia 2021 przez Ghost Bywalec (2,950 p.)
foreach masz źle, daj klamry i będzie działać albo usuń za komentowaną linię

Podobne pytania

0 głosów
1 odpowiedź 873 wizyt
0 głosów
1 odpowiedź 106 wizyt
pytanie zadane 29 czerwca w C# przez chrystian Gaduła (4,060 p.)

89,132 zapytań

137,737 odpowiedzi

307,744 komentarzy

59,181 pasjonatów

Motyw:

Akcja Pajacyk

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

Sklep oferujący ćwiczenia JavaScript, PHP, rozmowy rekrutacyjne dla programistów i inne materiały

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...