Databáze objektů – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Databáze objektů – Java – Fórum – Programujte.comDatabáze objektů – Java – Fórum – Programujte.com

 

Danal0
Duch
5. 4. 2014   #1
-
0
-

Zdravím, mám následující zadání: budu mít CNC stroje, celkem 5 typů. Každý má svá specifika. Co já potřebuju vyřešit, je, když uživatel chce přidat nový stroj - zadá ID stroje a typ stroje. Jak budu moct přistupovat k nějakému objektu jen na základě ID? Já to umím jen přes jméno, jenže v tomhle případě to nepůjde. Kdybych to dělal ručně, tak napíšu např. Stroj_typ1 a = new Stroj_typ1(12345); (kde 12345 je prostě ID). Takhle bych přistupoval k tomu objektu např a.nejakaMetoda() atd. Pokud ale nemá žádný název, jak k němu přistoupím? Četl jsem něco o LinkedListu, jenže i tak nevím, jak bych třeba v LinkedListu přistupoval k jednotlivým objektům (strojům) na základě ID. Ještě dodám, že to má být "databáze", kterou pak uložím do souboru a naopak ze souboru abych jí i uměl načíst.

Budu vám moc vděčný za jakoukoliv radu :-)

Díky, D.

Nahlásit jako SPAM
IP: 77.48.233.–
z
~ Anonymní uživatel
268 příspěvků
5. 4. 2014   #2
-
0
-

Určitě znáš přinejmenším pole a není snad problém ho projít a najít položku s tím ID. Stejně tak s tím Listem. A lepší by bylo vyhnout se procházení jednoduchého seznamu a použít něco s rychlým vyhledáváním. Na mapování klíč-hodnota je v Javě několik implementací interface Map.

Nahlásit jako SPAM
IP: 88.101.8.–
Danal0
Duch
5. 4. 2014   #3
-
0
-

Dobře, udělám to klasicky přes pole, nevím proč mě to nenapadlo. To mapování klíč - hodnota jsem jen něco zaslechl, podívám se víc na to.

Díky moc!

Nahlásit jako SPAM
IP: 77.48.233.–
Flowy0
Věrný člen
5. 4. 2014   #4
-
0
-

   

Map <Integer, Stroj> mapa = new TreeMap<>();
mapa.put(id, stroj);
stroj = mapa.get(id);
Nahlásit jako SPAM
IP: 95.103.186.–
https://github.com/Flowy
Danal0
Duch
5. 4. 2014   #5
-
0
-

#4 Flowy
tohle dělá co přesně, prosím? :-D 2. řádek mi přidá jeden stroj s ID co zadal uživatel, ne? a ten třetí řádek? proč do stroje ukládám ID? a teda v mainu si udělám treemap, a v metodě mimo main bych potřeboval napsat to "mapa.put(id, stroj);",

ale "stroj" mám červěně podtrženej: "stroj cannot be resolved to a variable"

díky moc za trpělivost a sorry jestli mám stupidní dotazy...

D.

Nahlásit jako SPAM
IP: 77.48.233.–
Danal0
Duch
5. 4. 2014   #6
-
0
-

nakonec bych to udělal takhle:

Map <Integer, stroj> mapa = new HashMap<>();
		mapa.put(ID, new stroj_A(ID));

jenže takhle by mi to fungovalo jan v mainu.. ale já bych rád v mainu si nějakou tu HashMap vytvořil a když zavolám metodu, abych do ní přidal.. jenže to mi podtrhne "mapa" v 2. řádku červeně s touhle hláškou:

"mapa cannot be resolved"

to by pak snad bylo všechno.. jen teda jestli ještě někdo ví, jestli si nějak můžu upravit výpis tý mapy...když dám prostě  

System.out.println(mapa);


tak mi to vypíše {klíč = můj výpis stroje, klíč2 = zase výpis dalšího stroje, atd atd} .. rád  bych se zbavil toho, aby mi to před tím psalo ten klíč, ale aby mi to prostě vypsalo ty stroje.. tak jestli někdo má nějakej nápad, budu vděčnej :) díky moc

Nahlásit jako SPAM
IP: 77.48.233.–
sleepy
~ Anonymní uživatel
422 příspěvků
5. 4. 2014   #7
-
0
-

Lebo si nevytvoril referenciu na stroj. Cize cely kod by mohol vyzerat nejak takto.  

class DatabazaStrojov {
	Map<Integer, Stroj> stroje = new HashMap<>(); // <> operator je len v jave 7 a 
						 	// vissie. V < 7 musis pisat
							// new HashMap<Integer, Stroj>()
	// Ak ma kazdy stroj definovane svoje ID
	public void pridajStroj(Stroj s) {
		stroje.put(s.getID, s);
	}

	// Ak nema definovane svoje id v objekte stroj
	public void pridajStroj(Integer idStroja, Stroj s) {
		stroje.put(idStroja, s);
	}

	// Touto metodou budes vediet vytiahnut stroj podla jeho id
	public Stroj vratStroj(Integer id) {
		return stroje.get(id);
	}

	// Atd. ...
}

class Stroj {
 // tu mas nejaky kod
}

// a budes s tym pracovat nasledovne
DatabazaStrojov d = new DatabazaStrojov();
// ak mas v stroji definovane id
d.pridajStroj(new Stroj(12345));
d.pridajStroj(new Stroj(12325));
// atd

// ak nemas v stroji definovane jeho id
d.pridajStroj(12345, new Stroj(/* premenne */)));

// a vytiahnes data nasledovne
Stroj strojSId12345 = d.vratStroj(12345);

Vyssie bolo napisane len ako sa to pouziva. Toto co som napisal ja je v podstate wrapper nad HashMapou.

Nahlásit jako SPAM
IP: 158.195.196.–
sleepy
~ Anonymní uživatel
422 příspěvků
5. 4. 2014   #8
-
0
-

#6 Danal
Overridni metodu toString()

Nahlásit jako SPAM
IP: 158.195.196.–
Danal0
Duch
5. 4. 2014   #9
-
0
-

#7 sleepy
díky moc!!! :) jinak ještě já mám přepsanou metodu toString ve třídě stroj, ale nevím jak přepsat nějak ten výpis hashmapy... můj výpis vypadá takhle:

{123=ID: 123    kapacita: 50 soucastek/h    narocnost: 2 W/soucastku    porucha: neni
}

právě ty chlupatý závorky na začátku a na konci a taky to: "123=" bych rád hodil pryč :-D

zkoušel jsem použít Iterator, že bych to vypisoval prostě stroj po stroji, jenže to mi nějak nechce fungovat... to jsem udělal takle:

import java.util.*;
Iterator it = mapa.iterator();


podle netu, ale to mi taky nefunguje.. :(

Nahlásit jako SPAM
IP: 77.48.233.–
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, 6 hostů

Podobná vlákna

Vykreslování objektů — založil delicacyy

Pole v objektu — založil foxik

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ý