uloha z Javy

Programovacie jazyky, rady, poradňa...
yankee
Medium Star
Medium Star
Príspevky: 384
Registrovaný: 06 júl 2006, 1:13

Re: uloha z Javy

Príspevok od používateľa yankee »

Toto je dalsie zadanie:
1. Úloha
Napíšte program, ktorý zotriedi pole čísel, v týchto verziách a) - d)
a) Čísla nech sú primitívne dátové typy int
b) Čísla nech sú dátové typy Integer
c) Zotrieďte ich vzostupne aj zostupne
d) Použite triedu z java core API (jej názov zistite)
poznámka: Inicializácia poľa čísel hodnotami je priamo v kóde (tj. nemusíte ich načítavať zo vstupu).

chcel by som sa opytat ci mam spravne ulohu 1.b) , v Eclipse mi funguje zoradenie cisel, len by som chcel vediet, ci som tam dal spravne datove typy Integer

Kód: Vybrať všetko

public class TriedenieInteger {
	Integer[] poleCisel = new Integer[5];
	static Integer pomocnaPremenna = 0;
	public static void triedenieInteger(String[] args) {
		System.out.println("Zoradenie poľa čísel dát. typu Integer:");
		Integer[] poleCisel = {1, 7, 5, 3, 2};
		for (int i = 0 ; i < 5 ; i++) {
			for(int j = 4 ; j > i ; j--) {
				if (poleCisel[j - 1] > poleCisel[j]) {
					pomocnaPremenna = poleCisel[j - 1];
					poleCisel[j - 1] = poleCisel[j];
					poleCisel[j] = pomocnaPremenna;
				}
			}
		}
	System.out.println("["+poleCisel[0]+", "+poleCisel[1]+", "+poleCisel[2]+", "+poleCisel[3]+", "+poleCisel[4]+"]");
	}
}
javatar
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 6112
Registrovaný: 12 aug 2010, 14:49
Bydlisko: I don't exist at all.

Re: uloha z Javy

Príspevok od používateľa javatar »

Ano vytvaras a triedis pole v ktorom su instancie triedy Integer (objekty Integer - nie primitivne datove typy int).
Vytknut ti mozem len tuto cast kodu:

Kód: Vybrať všetko

	Integer[] poleCisel = new Integer[5];
Kedze to nie je staticka premenna a ty nevytvaras objekt ktory to pole obsahuje, nikdy sa nezavola, pokojne ten riadok vymaz. Riesenie je dat tu premennu staticku alebo ju zmazat. Ked ju das staticku uz ti nepojde nainicializovat v kode ako inicializujes druhu premennu ktorou toto pole prekryjes ak bude staticke. (pisem jak tatar, dufam ze mi rozumies). Proste ten riadok vymaz, alebo ho daj static a namiesto new Integer[5] tam daj {1, 7, 5, 3, 2} a potom ten riadok v kode priradujes to {1, 7, 5, 3, 2} zmaz.
yankee
Medium Star
Medium Star
Príspevky: 384
Registrovaný: 06 júl 2006, 1:13

Re: uloha z Javy

Príspevok od používateľa yankee »

tak mam dalsi mensi problem s tymto zadanim:

2. Úloha
Napíšte program, ktorý dostane pri spustení dva parametre - čísla. Program vypíše výsledok delenia týchto dvoch čísel. Na delenie čísel vytvorte samostatnú triedu s metódou. Main funkcia iba zavolá túto triedu.
Pomocou výnimiek ošetrite nesprávne vstupné parametre (nesprávny počet, nula ako menovateľ, vloženie reťazcov namiesto čísel a pod.) Rozhodnite o tom, akých typov by mali byť tieto výnimky (tj. kontrolované, alebo nekontrolované)

toto je moj kod:

Kód: Vybrať všetko

import java.util.InputMismatchException;
import java.util.Scanner;

public class Vypocet {
	public static void delenieDvochCisel(String[] args) {
		try {
		Scanner sc = new Scanner(System.in);
		System.out.print("Zadaj prvé číslo:");
		double a = sc.nextDouble();
		System.out.print("Zadaj druhé číslo:");
		double b = sc.nextDouble();
		double podiel = a / b;
		System.out.println("Podiel zadaných čísel je: " + podiel);
		} catch (InputMismatchException ex) {
			System.out.println("Zadal/a si nesprávne hodnoty.");
			
		}
		
	}
}
chyba mi cast zadania... osetrit delenie nulou, skusal som to pomocou ArithmeticException, ale nepodarilo sa, myslim ze to bude jednoduche, ale neviem prist na to ako to osetrit, dik za rady
axxis
Addict
Addict
Používateľov profilový obrázok
Príspevky: 3690
Registrovaný: 29 máj 2007, 21:53
Bydlisko: Spálené mlyny
Kontaktovať používateľa:

Re: uloha z Javy

Príspevok od používateľa axxis »

urobis to tak, ze pridas dalsie catch bloky. nap. na to delenie nulou to bude

Kód: Vybrať všetko

catch (ArithmeticException e) {
System.out.println ("Divide by 0:" + e);
} 
podobne to spravis aj pre to priradenie stringu, najskor to skus bez catchu, pozri sa v chybovom vypise aku vynimku to produkuje ( z hlavy ju neviem ) a potom dopis este jeden catch kde tuto vynimku odchytis a na vypis das co potrebujes.
Co sa mi vsak zda zle, je ze delenie prevadzas v triede main aj ked v zadani je, ze mas spravit na to triedu.
Skus to skor tak, ze si spravis triedu napr. MyMath a ta bude mat 2 instancne premenne, v konstruktore ich precitas a potom zavolast metodu, ktora bude mat v navratovej hodnote double. V tomto pripade mozes aj urobit nieco take, ze v tej triede bude kontrola vstupu. Napr. nieco taketo:
if ( delitel == 0) throw new MyDivisionByZeroException.
osetrenie tejto vynimky moze prebehnut priamo v tej triede, alebo pomocou throws klauzule mozes tu vynimku vyhodit vyssie, teda do metody main, v ktorej bude tato metoda volana
javatar
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 6112
Registrovaný: 12 aug 2010, 14:49
Bydlisko: I don't exist at all.

Re: uloha z Javy

Príspevok od používateľa javatar »

takze ak spravne citam zadanie tak to mas mat v dvoch triedach, jednoduchsie by si to mal s integermi ale ked to chces s double tak s dobule

Main trieda:

Kód: Vybrať všetko

package delenie;

import java.util.InputMismatchException;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        try{
            System.out.print("Zadaj prve cislo:");
            double a = sc.nextDouble();
            System.out.print("Zadaj druhe cislo:");
            double b = sc.nextDouble();
            System.out.println("Podiel zadanych cisel je: "+Delenie.DelCisla(a, b));
        }catch(ArithmeticException ex){
            System.out.println("Delis nulou");
        }catch(InputMismatchException ex){
            System.out.println("Zadal/a si nesprávne hodnoty.");
        }
    }

}
trieda Delenie:

Kód: Vybrať všetko

package delenie;

public class Delenie {

    public static double DelCisla(double a, double b) throws ArithmeticException{
        if(b==0)
            throw new ArithmeticException("Divide by 0");
        return a/b;
    }

}
V tejto triede pouzivam throw new ... nakolko ked double typ podelis nulou dostanes Infinity (co pre teba nie je ziadane)

No a ako sa zhruba pracuje s vynimkami.
Mas dve moznosti:
1. try-catch-(finally) blok - je pouzity v Main triede - myslim si ze to sa vola kontrolovana vynimka nakolko ju odchytavas (catch)
pri tomto sposobe priamo urcujes co sa v pripade vynimky stane (napriklad vypises ze je nieco zle)
naco si treba davat pozor:
- ak odchytavas viac druhov vynimiek aby boli v spravnom poradi (v tvojom pripade je to jedno) -> ak je jedna trieda vynimky potomkom druhej tak vzdy daj tu co je potomkom ako prvu
kedy tento typ vynimky pouzit:
- ked potrebujes priamo riadit ako sa ma program spravat v danom pripade (inak povedane ked uz priamo pouzivas metodu ktora moze vynimku hadzat)

2. klauzulu throws za menom metody (pouzite v triede Delenie - metoda DelCisla) - ak som spravne pochopil tak je to nekontrolovana vynimka nakolko len hadzes vynimku
pri tomto sposobe urcis typ vynimky ktory metoda hadze
naco si treba davat pozor:
- len na to aby si dobre urcil vynimku ktoru to ma hodit a pripadne ju identifikoval
kedy tento typ vynimky pouzit:
- ked tvoris metodu ktora je univerzalna, resp. pouzita vo vela miestach v kode
- vzdy ked vyvolanie vynimky moze sposobit viac scenarov
- nikdy nie v Main metode, pokial nie je tym sposobeny pad programu ziadany

Ak nieco nechapes tak sa pytaj.
yankee
Medium Star
Medium Star
Príspevky: 384
Registrovaný: 06 júl 2006, 1:13

Re: uloha z Javy

Príspevok od používateľa yankee »

aby som to upresnil, ja to mam spravene v dvoch triedach, vyssie som napisal iba triedu ktora spravi delenie, main triedu mam takto

Kód: Vybrať všetko

public class DelenieCisel {
	public static void main(String[] args){
		Vypocet.delenieDvochCisel(args);
	}
}
a potom triedu, ktora spravi delenie

Kód: Vybrať všetko

import java.util.InputMismatchException;
import java.util.Scanner;

public class Vypocet {
	public static void delenieDvochCisel(String[] args) {
		try {
		Scanner sc = new Scanner(System.in);
		System.out.print("Zadaj prvé číslo:");
		double a = sc.nextDouble();
		System.out.print("Zadaj druhé číslo:");
		double b = sc.nextDouble();
		double podiel = a / b;
		System.out.println("Podiel zadaných čísel je: " + podiel);
		} catch (InputMismatchException ex) {
			System.out.println("Zadal/a si nesprávne hodnoty.");
			
		}
	}
}
axxis ked som pouzil tvoj catch blok, vo vypise mi aj tak napisalo ze vysledok je infinity
axxis
Addict
Addict
Používateľov profilový obrázok
Príspevky: 3690
Registrovaný: 29 máj 2007, 21:53
Bydlisko: Spálené mlyny
Kontaktovať používateľa:

Re: uloha z Javy

Príspevok od používateľa axxis »

vymaz z toho println

Kód: Vybrať všetko

 + e
inak neviem ci je to Tvoje riesenie uplne super cez staticku metodu a args...
javatar
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 6112
Registrovaný: 12 aug 2010, 14:49
Bydlisko: I don't exist at all.

Re: uloha z Javy

Príspevok od používateľa javatar »

yankee napísal: axxis ked som pouzil tvoj catch blok, vo vypise mi aj tak napisalo ze vysledok je infinity
to preto lebo double mozes delit nulou (nehodi to exception)

a k tomu tvojmu rieseniu... myslim ze ta uloha minula svoj zmysel

ak som spravne pochopil tak zmyslom tej hodiny bolo naucit ta v main metode skladat program z casti implementovanych univerzalne v inych triedach, nie vsetko napchat do jednej metody a tu potom zavolat

jedna zo zasad dobreho programovania znie: robit najkratsie mozne metody, ale nie kratsie

kod co som postol funguje ako ma... inspiruj sa alebo sa pytaj

//autoeditácia príspevku (14 Okt 2010, 14:03)
axxis napísal:vymaz z toho println

Kód: Vybrať všetko

 + e
nepomoze, vynimka totiz vobec nebude vyvolana
yankee
Medium Star
Medium Star
Príspevky: 384
Registrovaný: 06 júl 2006, 1:13

Re: uloha z Javy

Príspevok od používateľa yankee »

ja som sa drzal casti zadania "...Na delenie čísel vytvorte samostatnú triedu s metódou. Main funkcia iba zavolá túto triedu...."
preto som to spravil tak ako som to spravil

a ked pises ze ked su cisla datove typy double, nevyhodi pri deleni nulou ziadnu chybu, zmenil som ich na int
axxis
Addict
Addict
Používateľov profilový obrázok
Príspevky: 3690
Registrovaný: 29 máj 2007, 21:53
Bydlisko: Spálené mlyny
Kontaktovať používateľa:

Re: uloha z Javy

Príspevok od používateľa axxis »

nepomoze, vynimka totiz vobec nebude vyvolana
aha, ty vole...to som ani nevedel, ze java taketo nieco robi...clovek sa stale uci. takze zostava jedine to navrhnute riesenie kontrolovat ci je delitel 0 a ak ano rucne vyhodit vynimku
yankee
Medium Star
Medium Star
Príspevky: 384
Registrovaný: 06 júl 2006, 1:13

Re: uloha z Javy

Príspevok od používateľa yankee »

Potreboval by som pomoct s dalsou ulohou

3. Úloha
Napíšte program, v ktorom budete do vhodnej kolekcie ukladať inštancie triedy Objednávka. Trieda objednávka bude mať atribúty: id objednávky, dátum vytvorenia, dátum zmeny a počet položiek. Program vytvorte tak aby kolekcia filtrovala duplicitné položky (objednávky). Dve objednávky sú rovnaké ak majú rovnaké id a dátum vytvorenia. (použite metódy equals() a comparetTo())


spravil som zatial triedu Objednavka a hlavnu triedu, ale neviem spravit to filtrovanie.

trieda Objednavka.java

Kód: Vybrať všetko

public class Objednavka {
	int idObj;
	String datVytvorenia;
	String datZmeny;
	int pocetPoloziek;
	
	public Objednavka(int idObj, String datVytvorenia, String datZmeny, int pocetPoloziek) {
		this.idObj = idObj;
		this.datVytvorenia = datVytvorenia;
		this.datZmeny = datZmeny;
		this.pocetPoloziek = pocetPoloziek;
	}
	
	public int getId() {
		return idObj;
	}
	public void setId(int idObj) {
		this.idObj = idObj;
	}
	
	public String getDatVytvorenia() {
		return datVytvorenia;
	}
	public void setDatVytvorenia(String datVytvorenia) {
		this.datVytvorenia = datVytvorenia;
	}
	
	public String getDatZmeny() {
		return datZmeny;
	}
	public void setDatZmeny(String datZmeny) {
		this.datZmeny = datZmeny;
	}
	
	public int getPocetPoloziek() {
		return pocetPoloziek;
	}
	public void setPocetPoloziek(int pocetPoloziek) {
		this.pocetPoloziek = pocetPoloziek;
	}
	
	@Override
	public String toString() {
		return "ID objedvanky = " + idObj + ": datum vytvorenia = " + datVytvorenia
				+ ", datum zmeny = " + datZmeny + ", pocet poloziek = " + pocetPoloziek+"\n";
	}
}
trieda MainObjednavka.java

Kód: Vybrať všetko

import java.util.ArrayList;
import java.util.List;

public class MainObjednavka {
	
	public static void main(String[] args) {		
		List<Objednavka> listObjednavky = new ArrayList<Objednavka>();
		
		listObjednavky.add(new Objednavka(03, "4.3.2010", "18.3.2010", 5));
		listObjednavky.add(new Objednavka(01, "20.2.2009", "26.3.2009", 9));
		listObjednavky.add(new Objednavka(02, "17.6.2009", "8.9.2009", 4));
		
		System.out.println(listObjednavky);

	}
}
javatar
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 6112
Registrovaný: 12 aug 2010, 14:49
Bydlisko: I don't exist at all.

Re: uloha z Javy

Príspevok od používateľa javatar »

jednoducho

do klasy objednavka pridaj toto

Kód: Vybrať všetko

 @Override
   public boolean equals(Object o){
       return (this.getId()==((Objednavka)o).getId())?true:false;
   }
(podmienka)?co_vrat_ked_true:co_vrat_ked_false;
je len skratena forma ifu vytvorena pre taketo pripady

a potom mas viac moznosti... ale aby si menil cim menej kodu tak si do main klasy pridaj tento kod

Kód: Vybrať všetko

public static void VlozDoKolekcie(List kde, Object co){
        if(!kde.contains(co)){
            kde.add(co);
        } else {
            System.out.println(co.toString()+" sa uz v kolekcii nachadza");
        }
    }
a namiesto listObjednavky.add(new Objednavka(02, "17.6.2009", "8.9.2009", 4)); volaj VlozDoKolekcie(listObjednavky, new Objednavka(02, "17.6.2009", "8.9.2009", 4));

metoda contains prebehne celu kolekciu a pomocou equals cekuje ci su objekty rovnake, na zaklade toho vyhodi true alebo false
yankee
Medium Star
Medium Star
Príspevky: 384
Registrovaný: 06 júl 2006, 1:13

Re: uloha z Javy

Príspevok od používateľa yankee »

ternarny operator podmiena?ak_true:ak_false poznam

dakujem za pomoc

//autoeditácia príspevku (23 Okt 2010, 13:39)
mam dalsiu prosbu o pomoc s touto ulohou:
4. Úloha
Napíšte program v ktorom bude simulovať zámok na mince. Zámok na mince sa otvorí vtedy ak je minca vhodných rozmerov. Vytvorte program tak, aby ste mohli kedykoľvek doplniť nové typy mincí bez toho aby ste museli zasahovať do kódu v triede predstavujúcej zámok na mince (použitie rozhrania).
Postup: Do zámku vložíte mincu a zámok vypíše či sa otvoril alebo nie. Pred vložením ďalšej mince ho nemusíte zatvoriť (nepamätá si že v predchádzajúcom kroku bol otvorený).


problem mam s tym, ze neviem ako spravit kontrolu tej mince. rozmyslal som ze ulozim do dvojrozmerneho pola rozmery vhodnych minci a potom vlozenu mincu len okontrolujem --> ak sa minca v poli nachadza zamok sa odomkne ak nenachadza zamok sa neodomkne,, Ale mam pocit, ze tymto sposobom by som uz nepotreboval ziadne rozhranie, tym by moje riesenie stratilo vyznam (kedze mame pouzit rozhrania). Teda moja otazka je ako to kontrolovanie mince spravit pomocou rozhrania.

moje zdrovoje kody:
main trieda

Kód: Vybrať všetko

public class Zamok {
	public static void main(String[] args) {
		
		VlozenieMince novaMinca = new VlozenieMince();
		Minca minca = new DvojEuroMinca();
		novaMinca.vlozenieMince(minca);
	}
}

Kód: Vybrať všetko

public class VlozenieMince {

	public void vlozenieMince(Minca minca2eura) {
				
		System.out.println("Bola vlozena minca");
		System.out.println(minca2eura.identifikacia(2, 0.3));
		System.out.println(minca2eura.odomknutie());
	}
}
rozhranie

Kód: Vybrať všetko

public interface Minca {
	
	
	public String identifikacia(double priemer, double hrubka);
	public String odomknutie();
	
	
}
Dvoj Euro-minca

Kód: Vybrať všetko

public class DvojEuroMinca implements Minca {
	
	public String identifikacia(double priemer, double hrubka) {
		return "Dvoj-Eurova minca";
	}
	
	public String odomknutie() {
		return "Zamok bol odomknuty.";
	}
}
dal som do metody identifikacia aj parametre hrubka a priemer, ale nikde nieje kontrola, takze by presla akakolvek minca (aspon myslim ze to tak je)
javatar
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 6112
Registrovaný: 12 aug 2010, 14:49
Bydlisko: I don't exist at all.

Re: uloha z Javy

Príspevok od používateľa javatar »

hmm.... zadanie som si precital 4x ale stale neviem ci som ho dobre pochopil

dnes to bude bez kodu, tento vikend som mimo kopu kde je akekolvek java ide

odporuju si tam tieto veci
-> minca zamok otvori ak je vhodnych rozmerov
-> vytarajte nove typy mici bez toho aby ste nieco menili v triede ktora zamok otvara

je jednoznacne ze trieda ktora otvara zamok musi robit aj kontrolu parametrov a ci to prejde alebo nie musi odniekal cerpat ale to menit nemozes (ak to schovas do inej triedy tak je to len o slovickareni nie o kodeni) cize pri vytvarani mince jej sam urcis ci odomnke alebo nie (co je pri simulacii zamku na mince evidentna blbost -> taky zamok musi ratat s tym ze sa tam vlozi minca ktoru v zivote nevidel a aj tak sa spravne rozhodnut ci otvori)

ja by som sa vydal cestou slovickarenia -> vytvor si triedu ktora bude obsahovat povolene konfiguracie minci -> ta bude mat metodu skontrluj mincu a porovna suradnice s pristupnymi

v rozhrani minca budes mat tieto metody
-> identifikacia : string ktory vypise co je to za mincu
-> rozmery : v poli vyplujes rozmery mince

nasledne vytvor niekolko minci a v triede ktora otvara zamok za pomoci dalsej triedy ktora bude len porovnavat ci prejde alebo nie rozhodni o odomknuti...

osobne si myslim ze je to ale blbe riesenie a tie rozhrania mas pouzit inde -> ale to je mozno len blud, nakolko mi dost chyba spanok... ak mi nieco napadne tak to tu este postnem

PS: vdaka za tvoje :plus:
yankee
Medium Star
Medium Star
Príspevky: 384
Registrovaný: 06 júl 2006, 1:13

Re: uloha z Javy

Príspevok od používateľa yankee »

tak som tu s dalsou ulohou:

Kód: Vybrať všetko

Úloha 1
Navrhnite a namodelujte aplikáciu predstavujúcu pokladničný systém v kaviarni
V kaviarni si môžete dať kávu a na ňu (k nej) rôzne prísady:

mlieko
cukor
smotanu
Káva môže byť 
tmavá
klasická
bezkofeinová
Veľkosť kávy môže byť 
malá
veľká
Ozdobená môže byť:
granko
škorica
kakao
Zákazník si pri objednaní povie, ktorú položku z štyroch zložiek si vyberá. Táto káva potom putuje do pokladne, kde sa vyráta jej cena.

Vašou úlohou je navrhnúť, namodelovať a implementovať tento príklad. Čiže spustíte aplikáciu (postačuje aj výpis do konzoly) a systém sa Vás opýta v štyroch krokoch na jednotlivé položky a na konci Vám povie cenu.
Riešenie by určite malo obsahovať triedu pokladňa, ktorá bude mať metódu do ktorej vstupom bude káva a výstupom bude cena.

Je potrebné rátať s tým, že počet ingrediencií sa môže meniť tj. môžu pribudnúť nové.
Tiež sa môže meniť cena týchto ingrediencií.
A zákazník si tiež môže povedať, že chce ingrediencie dvojnásobné množstvo (okrem veľkosti - to nie ingrediencia 

Riešenie teda navrhnite tak, aby pri popísaných očakávaných zmenách bolo zásahov do programu čo najmenej, resp. na čo najmenej miestach.
Pretoze som este nerobil aplikaciu takehoto typu chcem sa opytat ako teoreticky by sa to dalo naprogramovat, t.j. ake triedy by sa dali vyuzit a ako by spolupracovali, mam na mysli nieco ako UML diagram.
javatar
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 6112
Registrovaný: 12 aug 2010, 14:49
Bydlisko: I don't exist at all.

Re: uloha z Javy

Príspevok od používateľa javatar »

len tak pre istotu -> to ze si dam cukor nevylucuje ze si dam mlieko a smotanu?
ozdoba musi byt?

inak povedane: mozem prist a povedat jednu velku tmavu kavu s dvojitym cukrom a mliekom bez ozdoby?
yankee
Medium Star
Medium Star
Príspevky: 384
Registrovaný: 06 júl 2006, 1:13

Re: uloha z Javy

Príspevok od používateľa yankee »

ja som to zadanie pochopil tak, ze sa to nevylucuje, ale nizsie v zadani, je napisane ze zakaznikovy sa postupne ponuknu polozky na vyber takze podla tej vety, zakaznik nebude mat sancu objednat si dva krat cukor.... takze pre jednoduchost to nechajme tak ze z kazdej podponuky si vyberie jednu alebo ziadnu polozku, aby sme sa rozumeli, zakaznikovy budu ponuknute styri ponuky:

prísady
mlieko, cukor, smotanu
Káva môže byť
tmavá, klasická, bezkofeinová
Veľkosť kávy môže byť
malá, veľká
Ozdobená môže byť
granko, škorica, kakao
javatar
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 6112
Registrovaný: 12 aug 2010, 14:49
Bydlisko: I don't exist at all.

Re: uloha z Javy

Príspevok od používateľa javatar »

no fajn.. takze ako by som to robil
trieda kafe ktora obsahuje atributy
-prisada (pricom trieda prisada bude abstraktna a bude mat metodu cena, a boolean dvojita)
-typ kafe -> to moze byt aj string a potom v inej statickej triede ti bude vypluvat cenu podla stringu
-boolean velkost
-ozdoba(obdobne ako prisada)
metody
-vypluj cenu -> vyplujes cenu podla metod jednotlivych zloziek alebo cez staticku triedu cennik do ktorej vlozis polozky

chapeme sa? alebo kod? alebo diagram? moc sa mi kreslit nechce a UML si tiez uz velmi nepamatam
yankee
Medium Star
Medium Star
Príspevky: 384
Registrovaný: 06 júl 2006, 1:13

Re: uloha z Javy

Príspevok od používateľa yankee »

nieco som pochopil nieco nie, ale zatial diky, skusim nieco zacat, viac porozmyslat, v sobotu o polnoci mam deadline takze je najvyssi cas napisat aspon public class Kaviaren

//autoeditácia príspevku (05 Nov 2010, 20:19)
edit... prave ma napadlo ci by sa to nedalo spravit pomocou rozhrania, v ktorom by bola metoda ziskajCenu, tato metoda by bola v triedach Prisada, TypKafe, Velkost, Ozdoba ktora by v kazdej triede vratila cenu, podla toho aku prisadu si vyberie zakaznik.... neviem ci si porozumel mojmu napadu

//autoeditácia príspevku (05 Nov 2010, 22:11)
takze popracoval som na tom mojom poslednom navrhu, spravil som interface Kava, ktory ma metodu ziskajCenu, tato metoda pomocou switch-u vrati prislusnu cenu, problem je ze pri spusteni mi vzdy vyjde cena 0.0 EUR moja otazka preco????? pripadne ci je to rozumne riesenie spravit cez ten interface

Kaviaren.java

Kód: Vybrať všetko

public class Kaviaren {
	public static void main(String[] agrs){
		double cenaKavy = 0;
		System.out.println("Vitajte v kaviarni, aku kavu si zelate?");
	
		Kaviaren kaviaren = new Kaviaren();
		Kava druhkavy = new DruhKavy();
		Kava velkostkavy = new VelkostKavy();
		Kava prisady = new Prisady();
		Kava ozdoby = new Ozdoby();
		cenaKavy += druhkavy.ziskajCenu();
		cenaKavy += velkostkavy.ziskajCenu();
		cenaKavy += prisady.ziskajCenu();
		cenaKavy += ozdoby.ziskajCenu();
		
		System.out.println("Celkova cena Vasej kavy je " + cenaKavy);
	}
}
interface Kava.java

Kód: Vybrať všetko

public interface Kava {
		
		public double ziskajCenu();

}
DruhKavy.java

Kód: Vybrať všetko

import java.util.Scanner;

public class DruhKavy implements Kava {

		public double ziskajCenu() {
			double cena = 0;
			Scanner sc = new Scanner(System.in);
			
			System.out.println("Prajete si: \n1. Klasicku kavu\n2. Tmavu kavu\n3. Bezkofienovu kavu");
			int vyber = sc.nextInt();
			switch (vyber) {
				case '1' : cena = 0;
				case '2' : cena = 0;
				case '3' : cena = 0;
			}
			
			return cena;
		}
}
VelkostKavy.java

Kód: Vybrať všetko

import java.util.Scanner;

public class VelkostKavy implements Kava {

	public double ziskajCenu() {
		Scanner sc = new Scanner(System.in);
		int vyber;
		double cena = 0;
		System.out.println("Prajete si: \n1. Malu kavu = 1 EUR\n2. Velku kavu 2,50 EUR)");
		vyber = sc.nextInt();
		switch (vyber) {
			case '1' : cena = 1;
			case '2' : cena = 1.5;
		}
		
		return cena;
	}
}
Prisady.java

Kód: Vybrať všetko

import java.util.Scanner;

public class Prisady implements Kava {

		public double ziskajCenu() {
			Scanner sc = new Scanner(System.in);
			int vyber;
			double cena = 0;
			System.out.println("Prajete si: \n1. Mlieko = 0,30 EUR" +
					"\n2. Cukor = 0,20 EUR\n3. Smotanu = 0,30 EUR");
			vyber = sc.nextInt();
			switch (vyber) {
				case '1' : cena = 0.3;
				case '2' : cena = 0.2;
				case '3' : cena = 0.3;
			}
			
			return cena;
		}
}
Ozdoby.java

Kód: Vybrať všetko

import java.util.Scanner;

public class Ozdoby implements Kava {

		public double ziskajCenu() {
			Scanner sc = new Scanner(System.in);
			int vyber;
			double cena = 0;
			System.out.println("Prajete si ju ozdobit: \n1. Grankom = 0,20 EUR" +
					"\n2. Skoricou = 0,40 EUR\n3. Kakaom = 0,30 EUR");
			vyber = sc.nextInt();
			switch (vyber) {
				case '1' : cena = 0.2;
				case '2' : cena = 0.4;
				case '3' : cena = 0.3;
			}
			
			return cena;
		}
}
javatar
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 6112
Registrovaný: 12 aug 2010, 14:49
Bydlisko: I don't exist at all.

Re: uloha z Javy

Príspevok od používateľa javatar »

yankee napísal: takze popracoval som na tom mojom poslednom navrhu, spravil som interface Kava, ktory ma metodu ziskajCenu, tato metoda pomocou switch-u vrati prislusnu cenu, problem je ze pri spusteni mi vzdy vyjde cena 0.0 EUR moja otazka preco????? pripadne ci je to rozumne riesenie spravit cez ten interface
ides na to trosku divne ale malo by to fungovat, interface je fajn riesenie, je to vlastne ako abstraktna trieda len nemoze mat atributy

no a preco 0.0€ ? no nemam tu momentalne javu ale skus dat tie cisla vo vetveni switch bez jednoduchych uvodzoviek :) je dost dobra sanca ze je to to prave v tom
Napísať odpoveď