Java - program na rezervaci míst ve vlaku – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Java - program na rezervaci míst ve vlaku – Java – Fórum – Programujte.comJava - program na rezervaci míst ve vlaku – Java – Fórum – Programujte.com

 

6. 6. 2015   #1
-
0
-

Ahoj všem, dělám seminárku do školy, a napadlo mě napsat sem, protože jsem se nějak zasekl, a ani strejda Google nějak nepomáhá.

- Program pracuje s místy v jednom vlaku.
- Vlak je složžen z 5 vozů.
- V kažždém voze je 12 oddílů (kupé).
- V každém oddíle je 6 míst.
- Číslování je v kažždém voze stejné: 11-16 (1. oddíl), 21-26 (2. oddíl) ... 121-126 (12. oddíl)

Dále si mám hrát s rezervacema, na konkrétní místo, přidat, zrušit, jen nevím jak je to s tou dědičností :( Díky za rady.

Nahlásit jako SPAM
IP: 85.70.173.–
ingiraxo+15
Grafoman
6. 6. 2015   #2
-
0
-

#1 PetrDolan93
v tomhle případě nepotřebuješ dědičnost vůbec...  

public class Main
{
    static class Passenger
    {
        private String name;
    }

    static class Place
    {
        private int number;
        private Passenger reserved; // bude null, pokud neni zadna rezervace
    }

    static class Coupe
    {
        private final List<Place> places = new ArrayList<>();
        private int number;
    }

    static class Wagon
    {
        private final List<Coupe> coupes = new ArrayList<>();
        private int number;
    }

    static class Train
    {
        private final List<Wagon> wagons = new ArrayList<>();
    }

    private static Train createTrain(int wagons, int coupes, int coupePlaces)
    {
        Train train = new Train();
        int coupeCounter = 1;
        int placeCounter = 1;

        for (int i = 0; i < wagons; i++) {
            Wagon wagon = new Wagon();
            wagon.number = i + 1;

            for (int j = 0; j < coupes; j++) {
                Coupe coupe = new Coupe();
                coupe.number = coupeCounter++;

                for (int k = 0; k < coupePlaces; k++) {
                    Place place = new Place();
                    place.number = placeCounter++;
                    coupe.places.add(place);
                }
                wagon.coupes.add(coupe);
            }
            train.wagons.add(wagon);
        }
        return train;
    }

    private static boolean reservePlace(Train train, Passenger passenger, int placeNumber)
    {
        for (Wagon w : train.wagons) {
            for (Coupe c : w.coupes) {
                for (Place p : c.places) {
                    if (p.number == placeNumber && p.reserved == null) {
                        p.reserved = passenger;
                        return true;
                    }
                }
            }
        }
        return false;
    }

    public static void main(String[] args)
    {
        Train train = createTrain(5, 12, 6);

        Passenger p = new Passenger();
        p.name = "Hulk";

        if (reservePlace(train, p, 20)) {
            System.out.printf("Místo %s bylo rezervováno pro: %s%n", 20, p.name);
        } else {
            System.out.printf("Místo %s nelze rezervovat%n", 20);
        }
    }
}

je potřeba to trochu rozházet do tříd, ošetřit vstupy, přidat metody pro přidání/odebrání pasažerů, případně wagonu a lepší správu rezervací

+ by bylo dobrý to trochu optimalizovat, např. držet ještě mapu s referencema na místa resp. Map<Integer, Place>, aby se rychlejí a líp pracovalo s rezervacema

Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
6. 6. 2015   #3
-
0
-

Rozumím, ale tady jde o to, že pak mám rezervovat místa podle vstupu z klávesnice :)

 Zrusšit všechny rezervace
 
- Zrušit konkrétní rezervaci na jedno místo - zadání z klávesnice: číslo vozu, oddílu, místo
  Výsledek operace:  
    - Zrušení proběhlo v pořádku, místo bylo uvolněno
    - Nelze provést, místo není rezervováno
    - Chyba, místo neexistuje
 
- Rezervace požžadovanného počtu míst v jednom oddíle.
  Výsledek operace:
    - Pokud se takové místo najde, je vypsána informace o voze, oddíle a místech,  
          kde byla rezervace provedena.
    - Pokud se takové místo nenajde, je vypsána informace, žže rezervaci nelze provést.
 
- Zobrazení aktuálního stavu
  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   .   .
====================================================
 
- Ukložžení aktuálního stavu do souboru a načtení ze souboru
  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 všemi místy volnými (nerezervovanými). 

Protože mám vypsat všechny vozy v matici 12x6, myslel jsem si, že by tomohlo být tak, že každý vůz má svoji třídu, a pak nasledně dědí od třídy vlak :)

Nahlásit jako SPAM
IP: 85.70.173.–
ingiraxo+15
Grafoman
6. 6. 2015   #4
-
0
-

#3 PetrDolan93
to je přeci nesmysl.. tady nic dědit nebudeš.. od třídy vlak nemůžeš dedit, protože žádná z těch tříd (objektů) nevychází z vlaku, jsou to samostatný kompoziční objekty

nikde není psáno, že to máš vypsat v matici.. to je jen příklad.. můžeš to vypsat podle vlastní vůle, jen aby to bylo přehledný

Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
6. 6. 2015   #5
-
0
-

Děkuju moc, moc mi to pomohlo :) Já mám obrnu, občas to nezapálí hned :D

Nahlásit jako SPAM
IP: 85.70.173.–
Kit+15
Guru
6. 6. 2015   #6
-
0
-

#3 PetrDolan93
Vůz není vlak, proto od něj nemůže dědit.

Naopak vlak má vozy a proto použiješ kompozici.

Nahlásit jako SPAM
IP: 194.228.13.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
6. 6. 2015   #7
-
0
-

ještě mám problém, že parametry konstruktoru ve špičatých závorkách bere NetBeans jako chybu,nabízí mi vytvořit balík se jménem parametru v té třídě přímo.

Nahlásit jako SPAM
IP: 85.70.173.–
ingiraxo+15
Grafoman
7. 6. 2015   #8
-
0
-

#7 PetrDolan93
a proč tam píšeš parametry ve špičatých závorkách? můžeš uvést příklad?

Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
7. 6. 2015   #9
-
0
-

#8 ingiraxo
třeba tohle
List<Place> places
mi bere jako chybu.

Nahlásit jako SPAM
IP: 85.70.173.–
ingiraxo+15
Grafoman
7. 6. 2015   #10
-
0
-

#9 PetrDolan93
tak si pravděpodobně nepřidal import pro List a Arraylist

import java.util.*;
Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
7. 6. 2015   #11
-
0
-

ten právě mám.

Nahlásit jako SPAM
IP: 85.70.173.–
ingiraxo+15
Grafoman
7. 6. 2015   #12
-
0
-

pošli to sem celý jak to máš

Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
7. 6. 2015   #13
-
0
-
Nahlásit jako SPAM
IP: 85.70.173.–
ingiraxo+15
Grafoman
7. 6. 2015   #14
-
0
-

#13 PetrDolan93
však máš špatnej import na List... použij ten, co jsem ti posílal

Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
7. 6. 2015   #15
-
0
-
Nahlásit jako SPAM
IP: 85.70.173.–
Kit+15
Guru
7. 6. 2015   #16
-
0
-

#15 PetrDolan93
Patří tam 

private List<Vagon> wagony = ArrayList<>();

Vlak je přece posloupnost (seznam) vagónů.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:221:5...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
ingiraxo+15
Grafoman
7. 6. 2015   #17
-
0
-

#15 PetrDolan93
možná by nebylo na škodu si občas hodit myš na tu žárovku s vykřičníkem a tam máš přesně napsáno co tomu vadí

ohledně toho listu... do ostrých závorek dáváš typ se kterým bude List pracovat, to znamená, že tam musí přijít existující objekt "Vagon", název proměnný potom můžeš mít klidně "vagony"

Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
Kit+15
Guru
7. 6. 2015   #18
-
0
-

#17 ingiraxo
"Vagon" v ostrých závorkách není objekt, ale třída.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:221:5...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
ingiraxo+15
Grafoman
7. 6. 2015   #19
-
0
-

#18 Kit
a třída je co? Objekt...

Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
Kit+15
Guru
7. 6. 2015   #20
-
0
-

#19 ingiraxo
Na to jsi přišel jak? Java není Python.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:221:5...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
ingiraxo+15
Grafoman
7. 6. 2015   #21
-
0
-

#20 Kit
všechno co v javě vytvoříš je objekt... ať už je to třída, interface, enum, cokoliv, tak vždy se jedná o objekt ;)

nevim, jestli si rozumíme.. ja mluvim o objektu jako takovým, né o slovíčkaření
si klidně nech vygenerovat uml diagram a tam jasně uvidíš, že všechny tvoje třídy mají potomka Objekt.. takže mají i společný metody jako getClass, toString, equals a další..

Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
Kit+15
Guru
7. 6. 2015   #22
-
0
-

#21 ingiraxo
Také nechci slovíčkařit, ale do špičatých závorek se nedává obecný objekt, ale třída.

Třídy nemají potomka Object, ale jsou potomky třídy Object.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:221:5...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
ingiraxo+15
Grafoman
7. 6. 2015   #23
-
-1
-
Mimo téma
Kit -

#22 Kit
no, ale to co se správně dává nebo nedává do Listu je v tuhle chvíli jedno, jde o to, že třída je objekt a ten můžeš vložit klidně jako typ do Listu.. ofc. v tomhle případě spíš použiješ List<?>, ale to je jedno

v tom druhým máš pravdu, jsem to napsal nějak opačně   

Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 9 hostů

Podobná vlákna

Java program — založil davidklimek

Java program — založil Dusty

Java program — založil Nepovim

Java program — založil davidklimek

Program java vysvětlení — založil Lukáš Stehlík

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý