String to variable – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

String to variable – Java – Fórum – Programujte.comString to variable – Java – Fórum – Programujte.com

 

MpPozor0
Newbie
20. 6. 2012   #1
-
0
-

Dobrý den všem,
tak bych potřeboval (zas) pomoc. Mám od uživatele String a v classe hromadu (opravdu dost) proměných stejného typu. Potřebuju do proměnné dosadit obsah z proměnné se stejným názvem jako zadal uživatel.

Nahlásit jako SPAM
IP: 85.132.159.–
TheOndrap
~ Anonymní uživatel
305 příspěvků
20. 6. 2012   #2
-
0
-

Jako to je docela potíž, to podle mě nejde. Nejsnažší by bylo, kdyby si měl ty proměnný String v poli(struktuře hashTable nebo něco)

HashTable <String, String> tabulka = new HashTable <String, String>;

kdy teda ten první string je index = tvůj název proměnné a ten druhý je klíč.

Ale mít

String prom1, prom2, prom3, ... ,prom100;
---
void vlozDoPromenne(String promenna, String hodnota){
	//a tady bys proste musel
	if(promenna.equal("prom1")){
		prom1 = hodnota;
	}
.
.
.
}

ale to podle mě na 1000% není správná cesta.

Nahlásit jako SPAM
IP: 88.102.250.–
MpPozor0
Newbie
20. 6. 2012   #3
-
0
-

Já k nim přistupuju většinou pomocí Class.promX , ale teď potřebuju i takto.
Jinak ty proměnné jsou mého typu (ne žádný String, ...)

Nahlásit jako SPAM
IP: 85.132.159.–
JoDiK
~ Anonymní uživatel
987 příspěvků
20. 6. 2012   #4
-
0
-

#3 MpPozor
Já myslím, žes to navrhnul špatně, když víc přiblížíš o co jde, třeba ti někdo poradí, jak to udělat lépe.

Předpokládám, že si uživatel nemůže napsat cokoliv - na to nemáš přece proměnné, takže musí vybírat z daného množství slov. Takže nejjednodušší řešení je - nenechat uživatele psát ten "string" ale nabídnout mu ho ze seznamu - klidně s možností psaní počátečních znaků a tak rychlého vyhledávání...

Pak nemusíš mít spoustu proměnných stejného typu, ale jen jednu proměnnou typu pole, do něhož budeš zapisovat podle pořadového čísla slova vybraného uživatelem...

Nahlásit jako SPAM
IP: 88.103.236.–
MpPozor0
Newbie
20. 6. 2012   #5
-
0
-

Dobře, takže v classu mám asi toto:
 

public static Panel prvni = new Panel(...);
public static Panel druhy = new Panel(...);
public static Panel treti = new Panel(...);
public static Panel ctvrty = new Panel(...);
public static Panel paty = new Panel(...);
...

Toto je jenom příklad, nějak temůžu najít flash.


Uživatel zadá string, písmena se převedou na malá. A poté potřebuju, aby když se bude schodovat s názvem jakékoli proměnné, tak aby se mi to načetlo, jinak to čekalo na zadání jiného (return ve void metodě).

Nahlásit jako SPAM
IP: 85.132.159.–
JoDiK
~ Anonymní uživatel
987 příspěvků
20. 6. 2012   #6
-
0
-

#5 MpPozor
A to co jsem ti navrhoval jsi četl? Pochopil? Zavrhnul jako nepoužitelné? Důvod?

Nahlásit jako SPAM
IP: 88.103.236.–
certeon0
Newbie
20. 6. 2012   #7
-
0
-

#5 MpPozor

Ahoj, javu neumím, ale pokud jsem správně pochopil řešený problém, tak toto by mohlo být řešení v c#...

třeba půjde použít algoritmus.

string prikazUzivatele; // Toto je proměnná s hodnotou uživatelova příkazu převedeného na malá písmena

public static Panel prvni = new Panel(...);
public static Panel druhy = new Panel(...);
public static Panel treti = new Panel(...);
public static Panel ctvrty = new Panel(...);
public static Panel paty = new Panel(...);

Dictionary<string, Panel> panely = new Dictionary<string, Panel>();

panely.Add("prvni", prvni);
panely.Add("druhy", druhy);
panely.Add("treti", treti);
panely.Add("ctvrty", ctvrty);
...
...

foreach (Panel klic in panely.keys)
{
   if (klic == prikazUzivatele)
   {
      Nacist(panely[klic]); // Zde už našel příslušný panel
      break;
   }
}

Nahlásit jako SPAM
IP: 109.71.213.–
MpPozor0
Newbie
20. 6. 2012   #8
-
0
-

#7 certeon
Jen že těch proměnných mám opravdu dost a proto se mi to nechce přepisovat a dělat další seznam (a do toho se mi nechce.
A taky když přidám další, tak bych musel přidávat i do seznamu.

Nahlásit jako SPAM
IP: 85.132.159.–
JoDiK
~ Anonymní uživatel
987 příspěvků
20. 6. 2012   #9
-
0
-

#8 MpPozor
Takže nepochopil...

V mnou navrhovaném řešení bys nové názvy právě přidával jen do jediného místa, a to do seznamu...

Nahlásit jako SPAM
IP: 88.103.236.–
certeon0
Newbie
20. 6. 2012   #10
-
0
-

#8 MpPozor

Další možnost, ale nevím, zda to Java umí, je použít kód ve stylu eval.

Z principu fungování jazyka by jiné varianty neměly být možné.

Buď onen text co napíše uživatel změníš na příkaz, za běhu jej necháš přeložit a spustit, nebo musíš použít kolekci, abys mohl procházet jednotlivé položky a porovnávat.

Ta kolekce jde např. v c# zjednodušit na:

panely.Add("prvni", new Panel(...));
panely.Add("druhy", new Panel(...));
panely.Add("treti", new Panel(...));
panely.Add("ctvrty", new Panel(...));

tím spláchneš dohromady konstrukci objektu s jeho zařazením do kolekce a máš o polovinu kratší kód

Nahlásit jako SPAM
IP: 109.71.213.–
MpPozor0
Newbie
20. 6. 2012   #11
-
0
-

#10 certeon
No, nějak to spáchám a potom napíšu. A nebo to celé přepracuju.

Nahlásit jako SPAM
IP: 85.132.159.–
certeon0
Newbie
20. 6. 2012   #12
-
0
-

#9 JoDiK

To řešení předdefinovaného seznamu je také pěkné, ale záleží na situaci, v jaké to chceš použít. Do Konzole listbox nedáš :)

#8 MpPozor

Tak hodně štěstí :)

Nahlásit jako SPAM
IP: 109.71.213.–
TheOndrap+2
Super člen
24. 6. 2012   #13
-
+1
-
Zajímavé

Mě prostě dokáže naštvat, že 10 lidí ti tady napíše, že kolekce bude to nejlepší co můžeš použít a ty stejně napíšeš že "to nějak uděláš". Tak prostě buď máš tu třídu navrženou špatně a budeš se s tim s*át a nebo to předěláš .. podle mě předdefinovat ten seznam a potom používat get(); je lepší, rychlejší, elegantnější. V C# je to dictionary, v java je to hashTable - klíč, hodnota .. HashTable<String, JPanel>, jak jsem psal rovnou

Nahlásit jako SPAM
IP: 88.102.250.–
ZČU v Plzni je mnohem víc, než jenom právnická fakulta !!
Fakulta aplikovaných věd www.fav.zcu.cz
"Když nedokážete říci věci jednoduše, pak jim dostatečně nerozumíte"
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ů

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ý