» »

C# LinkedList

C# LinkedList

PoPon2 ::

Pozdravljeni,

zanima me zakaj mi, ko hočem spremeniti le prvi element v seznamu, ki ustreza iskani ceni, spremeni vse elemente z isto ceno. Prosim za pomoč.

Koda:
public bool PoizkusiRezerviratiSedez(double cena, Oseba oseba) {
foreach (Sedez sedez in letalo)
{
if (sedez.Prost == true && sedez.Cena == cena)
{
sedez.Potnik = oseba;
return true;
}
}
return false;
}

LP

Mitja Bonča ::

Vse ti ne spremeni, ampak samo tiste lastnosti objekta Sedez, ki ustrezajo dvema pogojema: sedez prost in sedez ima točno določeno ceno.
Nevem točno kaj hočeš spremeniti v objektu Sedez,hočeš zapolniti prvi prosti sedež za točno določeno osebo (ki ustreza še pogoju cena sedeza)?

Evo sem naredil en simple primer, iz tvojih podatkov. Upam da bo koristil:
 public partial class Form1 : Form
    {
        List<Sedez> letalo;
        public Form1()
        {
            InitializeComponent();

            letalo = new List<Sedez>();
            //napolnimo nekaj primerov:
            letalo.AddRange(
                new Sedez[]{
                new Sedez { Cena = 150.10f, Prost = true, Potnik = "" },
                new Sedez { Cena = 123.45f, Prost = true, Potnik = "" },
                new Sedez { Cena = 123.45f, Prost = false, Potnik = "Potnik 1" }}
                );

            Oseba oseba2 = new Oseba{ ImeOsebe="Potnik 2"};
            bool bRezervacija = PoizkusiRezerviratiSedez(123.45f, oseba2);
        }
        public bool PoizkusiRezerviratiSedez(float cena, Oseba oseba)
        {
            foreach (Sedez sedez in letalo)
            {
                if (sedez.Prost && sedez.Cena == cena)
                {
                    sedez.Potnik = oseba.ImeOsebe;
                    sedez.Prost = false;  //moraš tudi nastaviti da je sedež že zaseden!
                    return true;
                }
            }
            return false;
        }
    }

    public class Sedez
    {
        public float Cena { get; set; }
        public bool Prost { get; set; }
        public string Potnik { get; set; }
    }
   public class Oseba
    {
        public string ImeOsebe { get; set; }
    }


Mitja

arjan_t ::

Imaš za vse sedeže z isto ceno isti objekt?

PoPon2 ::

hvala Mitja,
samo tvoja koda mi ne pomaga na žalost.
Gre se zato, da imam razrede oseba, sedez in letalo. Sedez ima spremenljivke ceno in objekt razreda oseba, potnik(public class Sedez{double cena; Oseba potnik; ...)
V razredu letalo sem sem ustvaril seznam
linkedlist/sedez/ letalo = new linkedlist/sedez/ ()
v katerega se bodo shranjevali sedezi. Sedez bo lahko zaseden oz. bo imel nekega potnika, prost,...
Metoda:
public bool PoizkusiRezerviratiSedez(double cena, Oseba oseba),
naj razervirala prvi sedež, ki bo imel določeno ceno, in mu dodala potnika.
Ob uspešni rezervaciji bi vrnila true ob neuspešni false, kot je razvidno iz zgornje kode.
Problem nastane, ko pridem do prvega prostega sedeža in mu priredim osebo.
Toda stavek
sedez.Potnik = oseba;
namesto, da bi namestil samo to osebo na prvi sedež in končala zanko, ga namesti še na ostale sedeže z isto ceno, ki so takoj za njim.
To moram odpraviti.

upam da sedaj bolj razumete moj problem

arjan_t ::

še drugače vprašam: kakšna je koda za inicializacijo sedežev?

PoPon2 ::

razred Sedez
public class Sedez {
double cena;
Oseba potnik;

public Sedez(double cena) {
this.cena = cena;
potnik = null;
}

public Sedez(Sedez iz) {
cena=iz.cena;
potnik=iz.potnik;
}

public double Cena {
get { return cena; }
private set {
cena = value;
}
}
public bool Prost {
get { return potnik==null; }
}
public bool Zaseden {
get { return potnik!=null; }
}
public Oseba Potnik
{
get { return potnik; }
set { potnik = value; }
}
}

klicanje v mainu (JP1001 je objekt razreda letalo)

JP1001.PoizkusiRezerviratiSedez(35, new Oseba("P11111111", "Janez", "Novak"));

mogoče bi moral delati z IEnumerator... samo ne vem na kak način

Zgodovina sprememb…

  • spremenil: PoPon2 ()

arjan_t ::

še zmeraj nisi pokazal kje v letalo "nafilaš" sedeže

PoPon2 ::

public void DodajSedeze(uint steviloSedezev, double cena) {
Sedez sedez = new Sedez(cena);
for (int i = 0; i < steviloSedezev; i++)
{
letalo.AddLast(sedez);
}
}

arjan_t ::

Ti napolniš seznam z istim objektom Sedez, ker vsi elementi predstavljajo isti objekt se nastavi potnik "vsem" (samo enemu, a so vsi isti)

public void DodajSedeze(uint steviloSedezev, double cena) {
for (int i = 0; i < steviloSedezev; i++)
{
letalo.AddLast(new Sedez(cena));
}
}

Zgodovina sprememb…

  • spremenil: arjan_t ()

PoPon2 ::

joo model hvala ti :D to me je matral... eh simpl ko pasulj. Res ti hvala, še poštudiru nism na to. Dela zaj


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Stran Prevoz.org (strani: 1 2 3 4 5 6 7 8 9 )

Oddelek: Loža
447106156 (7667) recmajkemi
»

Letalski prevozniki namerno razsedajo družinske člane, da bi več zaslužili (strani: 1 2 )

Oddelek: Novice / Zasebnost
6114620 (9123) stara mama
»

[C#] Deserializacija

Oddelek: Programiranje
181771 (1374) Cvenemir
»

Povezani seznam

Oddelek: Programiranje
131991 (1588) pohano
»

Zakaj tako velik procent smrtnih nesreč ob padcu aviona (strani: 1 2 3 4 5 6 )

Oddelek: Znanost in tehnologija
29023222 (18521) antonija

Več podobnih tem