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.
Fórum › Java
String to variable
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.
#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...
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ě).
#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;
}
}
#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
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
Fakulta aplikovaných věd www.fav.zcu.cz
"Když nedokážete říci věci jednoduše, pak jim dostatečně nerozumíte"
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Undefined variable — založil Jakub
The variable 'a' is being used without being initialized. — založil George5
Local variable hides a field — založil plaski
Cout variable in f1 declared in another function f2 — založil temple_of
Kontrola zda string obsahuje jiný string — založil beachboy
Moderátoři diskuze