Diskuze: Java-program pro rezervaci míst ve vlaku
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.
Člen
Zobrazeno 7 zpráv z 7.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.
Ahoj, pro sedadla bych vytvořil normální 1rozměrné pole a poté bych touto metodou zjistil v kolikátém vagonu a v kolikátém kupé se nachází.
public class Vlak {
private static final int VAGONU=5;
private static final int KUPE=12;
private static final int SEDADEL=6;
private static final int POCET_SEDADEL=VAGONU*KUPE*SEDADEL;
private static final int[] sedadla=new int[POCET_SEDADEL];
public static String getMistoVeVlaku(int cislo_sedadla){
cislo_sedadla-=1;//Odečtu 1 protože číslování je od 1 a ja chci od 0
int cislo_vagonu= (int) Math.floor(cislo_sedadla/(KUPE*SEDADEL));
int zbytek =cislo_sedadla-cislo_vagonu*(KUPE*SEDADEL);
int cislo_kupe=(int) Math.floor(zbytek/SEDADEL);
cislo_vagonu+=1;//Přičíst 1 protože číslování je od jedničky a ne od 0
cislo_kupe +=1;
return "["+cislo_sedadla+"]Misto ve "+cislo_vagonu+". vagonu, v "+cislo_kupe+". kupe";
}
}
Napiš, jestli ti to pomohlo.
Moc děkuji za radu jen teď přemýšlím nad tím, jak pracovat s místem, pokud bych ho chtěl rezervovat, myslím, že by bylo nejlepší,abych si vytvořil metodu, které bych předával ono místo, ale nejsem si moc jistý, asi moc přemýšlím a kombinuju přikládám celé zadání, abyste byl v obraze, ale kód nepotřebuji, spíš by se mi hodila nějaká ochotná duše,která by byla ochotná se mnou diskutovat, popřípadě jen navést na správnou cestu
Program umožňuje:
kde byla rezervace provedena.
Ve vhodné textvé podobě se zobrazí aktuální stav obsazení jednotlivých míst/oddílů/vozů.
Např:
====================================================
Vůz 1
| 01 02 03 04 05 06 07 08 09 10 11 12
1 | x x .
2 | x . . atd.
3 | . . .
4 | . . .
5 | x . .
6 | x . .
====================================================
Způsob ukládání do souboru je zcela libovolný.
Program automaticky při svém ukončení uloží akltuální stav vlaku do souboru.
Program automaticky při svém startu se pokusí nalézt uložený soubor a načte z něj stav.
Pokud se soubor s uloženým stavem nenajde, bude vlak iniciován se vemi místy volnými (nerezervovanými). Děkuji mockrát za Váš čas
Aha, tak to se omlouvám, pořádně jsem si nepřečetl dotaz. Tak v tom
případě se naskytují 2 řešení:
.
.
Každopádně se to bude řešit přes statické pole, jelikož známe přesný
počet míst ve vlaku. Dále použijeme novou třídu Sedadlo, protože bychom
si asi kromě toho jestli toto místo je rezervované, chtěli zjistit také
kým je rezervováno. Sedadlo bude sloužit pouze jako přepravka na hodnoty a
bude mít atributy: boolean jeRezervovano, String jmenoTohoCoRegistroval.
.
.
1. řešení: je vytvořit 2rozměrné pole, kde 1. rozměr bude zastupovat
číslo vagonu a 2. rozměr tohoto pole by zastupoval pořadí sedadla ve
vagonu. Čili pole Sedadlo[vagon][poradi_sedadla_ve_vagonu]. Pokud bychom
použili toto řešení, bylo by nutné, udělat 2 metody: 1. by měla za
parametry měla číslo kupe a číslo sedadla v kupé (1.-6. sedadlo) a vracela
by index sedadla ve vagonu. 2. by dělala opak: jako parametr by měla index
sedadla ve vagonu a vracela by číslo kupé a číslo sedadla v kupé (1.-6.
sedadlo)
.
.
2. řešení: je vytvořit 3rozměrné pole, kde 1. rozměr bude číslo vagonu,
2. kupé a 3. bude číslo sedadla v kupé (1.-6. sedadlo). Čili 3rozměrné
pole: Sedadlo[vagon][kupe][poradi_sedadla_v_kupe]. Pokud bychom použili
toto řešení, museli* bychom do třídy Sedadlo přidat atribut int
index_sedadla_ve_vagonu, čímž bychom vyřešili to číslování. Totiž
při vytvoření nového Vlaku = poleSedadel bychom do každého místa v poli
vložili sedadlo a rovnou bychom mu dali finální index_sedadla_ve_vagonu (od
1 do 12x6). To je ale naprosto zbytečné plýtvání pamětí programu a
velikostí dat. Pro zjištění index_sedadla_ve_vagonu bychom jednoduše
vynásobili (index_kupé * sedadel_v1_kupe) a přičetli bychom k tomu
index_sedadla. Opačně bychom zase vydělili (index_sedadla_ve_vagonu /
sedadel_v1_kupe)=index_kupe a zbytek z toho dělení bychom použili jako
index_sedadla_v_kupe.
Upřímně se kloním k 2. možnosti a to k trojrozměrnému poli. Je to mnohem přehlednější, logičtější a nejlépe se s tím pracuje: stačí zadat vagon, kupe, sedadlo a máte sedadlo co chcete.
Moc díky za Tvůj čas(až teď jsem si všil, že si tu tykáme.) Já jen uvažuji nad tím, jestli by třeba jeden vůz ve vlaku neměl být rovněž objektem. Dále mám jen problém s tím, že věci fungují do chvíle, pokud píšu třeba metody jen obecně. Pokud mám přejít ke konkrétnímu řešení, třeba příklad vytvořit ten vlak, už mám problém v hlavě, protože i po všech přednáškách nevím jak postupovat, respektive vím, že předám metodám konkrétní parametry jen to technicky nefunguje.
Záleží na tom, jestli je vytvoření třídy vagon nutné. Jestliže se
bude pracovat pouze se sedadly ve vlaku, není zde pro toto řešení žádný
důvod. OOP (objektově orientované programování) je sice strašně super
věc, avšak nemělo by se to s ním přehánět. (Má to i své nevýhody: př
náročnost na paměť a pomalost) Jiná věc by byla, pokud by se mohli vagony
měnit (př výměna vagonu v důsledku opravy, přidání 1 vagonu do soupravy
kvůli většímu počtu lidí.) V tomto případě se jeví použití třídy
vagon jako logické řešení. Vlak by potom spravoval jednotlivé vagony a mohl
by libovolně měnit počet vagónů.
..
Pro tento problém je jediné řešení: učit se, učit se a učit se, a
samosebou zkoušet si to na příkladech. Např si zkusit udělat nějaký malý
program (nejlepší jsou hry:)), je až neuvěřitelné, kolik takových
problémů je třeba řešit. Další výborná věc je čtení nějakých
source kódů. Neříkám to zkopírovat, ale inspirovat se. Teď už můžeš označit
správné řešení této diskuse.
Doporučuji se kouknout na itnetwork na objektové programování v Javě. Tam jsou i ty příklady. Můžeš si poté stáhnout source kód a třeba si něco přidat nebo upravit.
Zobrazeno 7 zpráv z 7.