10 svar
129 visningar
OsantOsmart är nöjd med hjälpen
OsantOsmart 16
Postad: 26 aug 2021 16:05 Redigerad: 26 aug 2021 16:06

Klass i array, visar inte värden när jag printar ut dem.

Tjena, har kört fast på en uppgift där jag ska använda värden från en klass (2 st Integers i detta fall) som sparats i en array men vad jag än försöker i koden så skriver den bara en annan grej. Så här ser koden ut:

 

using System;

namespace TheBus
{
    class Bus
    {
        Passenger[] passengers = new Passenger[24];

        public void Run()
        {

            for (int i = 0; i < passengers.Length; i++)
            {
                // Tempvärden för Passenger för testing
                passengers[i] = new Passenger(1, 2);
                Console.WriteLine(passengers[i]);
            }
        }
    }
    class Passenger
    {
        private int age;
        private int gender;

        // Konstruktor
        public Passenger(int _age, int _gender)  
        {
            age = _age;
            gender = _gender;
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            var myBus = new Bus();
            myBus.Run();
        }
    }
}

Jag har på test försökt ge varje nytt objekt i array:n värdet 1 och 2 genom en loop för att testa men när jag printar ut det så står det bara TheBus.Passenger 24 ggr. Vad har jag gjort för fel?

beerger 962
Postad: 26 aug 2021 16:10

Vad förväntar du dig att den ska printa då?

OsantOsmart 16
Postad: 26 aug 2021 16:11

Jag vill att den ska skriva ut age och gender från klassen Passenger. Får dem inte värdet 1 och 2 genom loopen?

beerger 962
Postad: 26 aug 2021 16:12

Jo, alla 24 objekten tilldelas age = 1, gender = 2.

Men hur vet programmet vad den ska skriva ut från objektet?

OsantOsmart 16
Postad: 26 aug 2021 16:14

Bra fråga, hur gör man för att skriva ut t ex age från klassen i array:n då? :)

beerger 962
Postad: 26 aug 2021 16:14

Det finns en metod som heter ToString(), som du kan skriva över.

OsantOsmart 16
Postad: 26 aug 2021 16:15

Okej, ska kika på det, tack för svar.

beerger 962
Postad: 26 aug 2021 16:15
using System;

namespace TheBus
{
    class Bus
    {
        Passenger[] passengers = new Passenger[24];

        public void Run()
        {

            for (int i = 0; i < passengers.Length; i++)
            {
                // Tempvärden för Passenger för testing
                passengers[i] = new Passenger(1, 2);
                Console.WriteLine(passengers[i]);
            }
        }
    }
    class Passenger
    {
        private int age;
        private int gender;

        // Konstruktor
        public Passenger(int _age, int _gender)
        {
            age = _age;
            gender = _gender;
        }

        public override string ToString()
        {
            return String.Concat("age: ", age,", gender: ", gender);
        }   
    }

    class Program
    {
        static void Main(string[] args)
        {
            var myBus = new Bus();
            myBus.Run();
        }
    }
}
beerger 962
Postad: 26 aug 2021 16:19

Den här koden fungerar. Du måste använda keywordet override för att inte få detta felmeddelande:

'Passenger.ToString()' hides inherited member 'object.ToString()'. To make the current member ovveride that implementation, add the override keyword. Otherwise add the new keyword.

OsantOsmart 16
Postad: 26 aug 2021 17:30

Koden funkar utmärkt, kan du förklara lite hur den funkar? Jag fattar ungefär vad den gör, men hur gör man om man t ex bara vill skriva ut age eller bara gender? Måste man göra en ny metod för detta då?

beerger 962
Postad: 26 aug 2021 17:52

Om du bara vill skriva ut en enstaka sak, som t.ex. age, gender (dessa kallas för fields) läs denna länk:

https://www.w3schools.com/cs/cs_properties.php

Svara Avbryt
Close