From bdcd011364e64f254ee9c282850d53283c4f381a Mon Sep 17 00:00:00 2001 From: ruslaneskov <32193120+ruslaneskov@users.noreply.github.com> Date: Mon, 7 May 2018 22:42:03 +0300 Subject: [PATCH 1/3] Create EX12.rst --- Solutions/EX12.rst | 138 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 138 insertions(+) create mode 100644 Solutions/EX12.rst diff --git a/Solutions/EX12.rst b/Solutions/EX12.rst new file mode 100644 index 0000000..915d78d --- /dev/null +++ b/Solutions/EX12.rst @@ -0,0 +1,138 @@ +EX12 +==== +Class Cargo + +Selleks, et mitte luua iga kauba tüübi jaoks eraldi klassi, loome enum`i. + + .. code:: java + + public enum CargoType { + HUMAN(1), WOOD(2), WATER(3), FUEL(4), FIRE(5); + + int dangerLevel; + + CargoType(int value) { + this.dangerLevel = value; + } + + } +Selleks, et igal kaubal oleks riskitase, kasutan annan igale enumi väärtusele kaasa numbri, mis tähendab riskitaset. + + .. code:: java + + public Cargo(CargoType cargoType) { + this.name = cargoType; + } + + public int getDangerLevel() { + return name.dangerLevel; + } + +Class Car + +Siin klassis võiks olla muutuja, mis hoiab enda sees klassi Cargo objekti (või mitte hoiab, juhul kui car on tühi). Kuna car võib tühi olla, +siis peab olema võimalus seda täita kaubaga. Näiteks iga Cargo objekti sees võib olla muutuja, kuhu pannakse sisse kaup. + + .. code:: java + + public String getCargoName() { + if (cargo == null) { + return "EMPTY"; + } else { + return cargo.getName(); + } + } + +Class Engine + +Kuna veduriga peab andma kaasa tema riskitaset, siis peaks juba konstruktoris määrama, et veduri loomisel seda kindlasti annakse kaasa. +Sellele võiks järgneda kontroll selleks, et keegi kogemata ei paneks riskitaseme väärtuseks negatiivse arvu või nulli. + + .. code:: java + + if (riskLevel <= 0) { + risklevel = 1; + } + +Class Train + +Kuna rongil on vedur ja vagunid, siis rongi loomisel peaks andma talle veduri ja vaguneid. +On vaja meeles pidada, et mõned kaubad ei sobi koos vedamiseks, seega on vaja teha kontroll. Näiteks, lisada kõik potentsiaalsed kaubad +listi ja siis kirjutada abimeetod. Kui lugeda hoolikalt läbi kaupade mittesobivused, siis osutub, et õigeid kombinatsioone pole väga +palju. + + .. code:: java + + private boolean cargosAreOk() { + return cargos.size() == 0 || cargos.size() == 1 || cargos.contains("FUEL") + && cargos.contains("WOOD") || cargos.contains("WATER") && cargos.contains("HUMAN") + || cargos.contains("WOOD") && cargos.contains("HUMAN"); + } + +Kui kontroll on tehtud, siis oleks vaadata ka seda, et riskitase ei läheks liiga suureks. Võiks teha listi, kuhu pannakse kõik vagunid, +mille summaarne riskitase oleks väiksem kui vedur võimaldab. + .. code:: java + + int sum = 0; + for (Car car: a) { + if (sum + car.getCargo().getDangerLevel() <= engine.getRiskLevel()) { + trainCars.add(car); + sum += car.getCargo().getDangerLevel(); + } + } + +Class Depot + +Võiks olla list kus hoitakse selle depoo vagunid ning ka selle depoo vedurid. Peab olema võimalus lisada ja eemaldada listidest elementid +(kuna depoosse võib olmuda uus rong või siis vedur). Peamiseks meetodiks depoo klassis on rongi tegemine. Rongide mäletamiseks pärast +rongi tegemist võiks seda lisada listi. Algul peaks tegema kaupade kontrolli (vaata meetodit üleval). + +Siis peaks tegema valuku veduri suhtes. (Mõistlik teha eraldi meetodis) PS. Siin valitakse parimat vedurit (boonus) + + .. code:: java + + if (engineList.size() > 0) { + if (cargoTypes.length == 1 && cargoTypes[0].getDangerLevel() > this.getBestEngine().get() + .getRiskLevel()) { + try { + throw new TooRiskyCargo("Too risky"); + } catch (TooRiskyCargo a) { + System.out.println("Too risky cargo"); + return Optional.empty(); + } + } + int index = 0; + for (int i = 0; i < engineList.size(); i++) { + if (engineList.get(i).getRiskLevel() > engineList.get(index).getRiskLevel()) { + index = i; + } + } + Engine head = engineList.get(index); + engineList.remove(index); + +Nüüd peab panema kaubad vagunitesse ja teha rongi. Alljärgnevas koodis on vaadatud juhtum kus esimeseks vaguniks ei tohi olla fuel +(tehakse Boonust). Vaadake kindlasti üle ka teised juhtumid (kui rongi ei tagastata) ja tagastake tühka Optional`i. Tulemus salvastatakse +rongide listis. + + .. code:: java + + if (riskLevel <= 0) { + risklevel = 1; + } + if (chosenCarsss.size() > 0) { + if (chosenCarsss.get(0).getCargoName().equals("FUEL")) { + return Optional.empty(); + } + Train trainNew = new Train(head, chosenCarsss.toArray(new Car[chosenCarsss.size()])); + trainList.add(trainNew); + return Optional.of(trainNew); + } + +Boonus + +Selles osas on vaja kasutada erindite püüdmist ning ka teha erindeid. Soovitan lugeda sellest siin: +https://ained.ttu.ee/javadoc/Exceptions.html#erindiga-tegelemine-exception-handling +Lisaks sellele on vaja kirjutada testid. Testide kirjutamise kohta saab teada siin (lõpus): +https://ained.ttu.ee/mod/charon/view.php?id=6045 + +Kontroll selleks, et kütus poleks esimeseks kaubaks on realiseeritud ning veduriks valitakse ka parima riskitasemega vedur. From 400e788f89acaf617e4f5c8b669f4cc280f4f88b Mon Sep 17 00:00:00 2001 From: ruslaneskov <32193120+ruslaneskov@users.noreply.github.com> Date: Mon, 7 May 2018 22:43:26 +0300 Subject: [PATCH 2/3] Update EX12.rst --- Solutions/EX12.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Solutions/EX12.rst b/Solutions/EX12.rst index 915d78d..d80155d 100644 --- a/Solutions/EX12.rst +++ b/Solutions/EX12.rst @@ -7,7 +7,7 @@ Selleks, et mitte luua iga kauba tüübi jaoks eraldi klassi, loome enum`i. .. code:: java public enum CargoType { - HUMAN(1), WOOD(2), WATER(3), FUEL(4), FIRE(5); + HUMAN(1), WOOD(2), WATER(4), FUEL(5), FIRE(6); int dangerLevel; From 33614c3f52d3d7e50a7b28618da8d0896b87e391 Mon Sep 17 00:00:00 2001 From: ruslaneskov <32193120+ruslaneskov@users.noreply.github.com> Date: Mon, 7 May 2018 23:06:50 +0300 Subject: [PATCH 3/3] Update EX12.rst --- Solutions/EX12.rst | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/Solutions/EX12.rst b/Solutions/EX12.rst index d80155d..fba4bad 100644 --- a/Solutions/EX12.rst +++ b/Solutions/EX12.rst @@ -21,11 +21,11 @@ Selleks, et igal kaubal oleks riskitase, kasutan annan igale enumi väärtusele .. code:: java public Cargo(CargoType cargoType) { - this.name = cargoType; + this.cargoType = cargoType; } public int getDangerLevel() { - return name.dangerLevel; + return cargoType.dangerLevel; } Class Car @@ -64,9 +64,9 @@ palju. .. code:: java private boolean cargosAreOk() { - return cargos.size() == 0 || cargos.size() == 1 || cargos.contains("FUEL") - && cargos.contains("WOOD") || cargos.contains("WATER") && cargos.contains("HUMAN") - || cargos.contains("WOOD") && cargos.contains("HUMAN"); + return cargos.size() == 0 || cargos.size() == 1 || cargos.contains(Cargo.CargoType.FUEL) + && cargos.contains(Cargo.CargoType.FIRE) || cargos.contains(Cargo.CargoType.WATER) && cargos.contains(Cargo.CargoType.HUMAN) + || cargos.contains(Cargo.CargoType.WOOD) && cargos.contains(Cargo.CargoType.HUMAN); } Kui kontroll on tehtud, siis oleks vaadata ka seda, et riskitase ei läheks liiga suureks. Võiks teha listi, kuhu pannakse kõik vagunid, @@ -94,10 +94,6 @@ Siis peaks tegema valuku veduri suhtes. (Mõistlik teha eraldi meetodis) PS. Sii if (engineList.size() > 0) { if (cargoTypes.length == 1 && cargoTypes[0].getDangerLevel() > this.getBestEngine().get() .getRiskLevel()) { - try { - throw new TooRiskyCargo("Too risky"); - } catch (TooRiskyCargo a) { - System.out.println("Too risky cargo"); return Optional.empty(); } }