vorrei sapere se è possibile trasformare una stringa in una variabile.
Per esempio, se ho una stringa "label", posso utilizzarla,
trasformandola, come label.setText("Nome Giocatore") ?
grazie anticipatamente
> vorrei sapere se � possibile trasformare una stringa in una variabile.
> Per esempio, se ho una stringa "label", posso utilizzarla,
> trasformandola, come label.setText("Nome Giocatore") ?
Lascia perdere, non � strada che spunta.
Con po' di fatica lo si pu� fare, anche se � pi� una cosa da linguaggi
di scripting.
Nella mia esperienza non ce n'� quasi mai bisogno: cosa stai cercando di
ottenere?
Ciao
Lucio
--
Lucio Benfante
JUG Padova http://www.parancoe.org ...have a look at it!
www.jugpadova.it http://www.jugevents.org
Lo sospettavo....cmq provo a spiegare il perchè di questa mia
richiesta e sperare in un'alternativa migliore della mia.
Per un esame universitario, sto realizzando un programma per giocare a
poker e dopo un bel pò di tempo passato col prolog è giunto il momento
di mettere mano al java (lo sto studiando per l'occasione).
Per adesso, sto riscontrando le difficoltà maggiori sulla creazione
dell'interfaccia grafica, ma pian piano ne sto venendo fuori...
In un tavolo da poker possono sedersi massimo 10 giocatori, così ho
posizionato, su un Jframe, 10 label (giocatore1, giocatore2, ...,
giocatore10) per indicare il nome del giocatore. Giocatori che
rappresento tramite la seguente classe
-------------------------------------------------------------------------------------------------------------------
public class Giocatore {
private String nome;
private int contante;
private int posto;
private ArrayList carte;
... ecc..
}
-------------------------------------------------------------------------------------------------------------------
dove con int posto specifico appunto su quale sedia (ovvero una delle
10 label create in precedenza) il giocatore si è seduto. Allo stato
attuale per posizionare sulla label(sedia) corretta il giocatore sono
costretto ad utilizzare un switch.
Ecco un esempio:
-------------------------------------------------------------------------------------------------------------------
switch(posto){
case 1:
nomeGiocatore1.setText(nomeGiocatore);
contanteGiocatore1.setText(contanteGiocatore);
break;
case 2:
nomeGiocatore2.setText(nomeGiocatore);
contanteGiocatore2.setText(contanteGiocatore);
break;
case 3:
nomeGiocatore3.setText(nomeGiocatore);
contanteGiocatore3.setText(contanteGiocatore);
break;
case 4:
nomeGiocatore4.setText(nomeGiocatore);
contanteGiocatore4.setText(contanteGiocatore);
break;
case 5:
nomeGiocatore5.setText(nomeGiocatore);
contanteGiocatore5.setText(contanteGiocatore);
break;
case 6:
nomeGiocatore6.setText(nomeGiocatore);
contanteGiocatore6.setText(contanteGiocatore);
break;
case 7:
nomeGiocatore7.setText(nomeGiocatore);
contanteGiocatore7.setText(contanteGiocatore);
break;
case 8:
nomeGiocatore8.setText(nomeGiocatore);
contanteGiocatore8.setText(contanteGiocatore);
break;
case 9:
nomeGiocatore9.setText(nomeGiocatore);
contanteGiocatore9.setText(contanteGiocatore);
break;
case 10:
nomeGiocatore10.setText(nomeGiocatore);
contanteGiocatore10.setText(contanteGiocatore);
break;
}
-------------------------------------------------------------------------------------------------------------------
Questa è una soluzione che non mi piace molto!!! Così mi è venuta
l'idea di trasformare una stringa in variabile
per eliminare lo switch con una riga di codice del genere ?
("nomeGiocatore"+posto).setText("Nome").
Avete qualche idea in merito ? Come potrei aggirare l'uso dello
switch ?
P.S:
non penso che l'idea di creare dinamicamente le 10 label e settare
subito il nome sia il migliore, perchè nel corso della partita dovrei
aggiornare le label con altre informazioni come il contante rimasto ed
altre info. Quindi il problema di individuare la label corretta
rimarrebbe.
spero di essermi spiegato chiaramente
lol...evviva l'universit�! :)
Mai sentito parlare degli array?
nomeGiocatore[posto].setText(nomeGiocatore);
contanteGiocatore[posto].setText(contanteGiocatore);
eh si..ho unito l'utile al dilettevole :D:D
> Mai sentito parlare degli array?
ops che stupido, ho pensato a tutto tranne alla soluzione più
ovvia...devo smettere di mettermi a studiare/programmare quando vado a
dormire la mattina...sto ancora dormendo ;)
grazie
Buon anno nuovo
Oliver
Potresti spiegarmi perch� una Map sarebbe pi� OO?
A parte il "problema" del pi� o meno OO (qualunque cosa voglia dire),
non mi pare che una mappa sia la struttura adatta in questo caso. Le
specifiche complete non ce le ha dette, ma sembrerebbe che abbia una
numero fisso di dati ordinati, a cui deve accedere per indice. Usare una
mappa vorrebbe dire invece accedere usando l'indice probabilmente in una
maniera del genere:
mappa.get("giocatore"+posto)...ecc.ecc..
Un uso di una mappa piuttosto inutile, e anche penalizzante in termini
di performance, rispetto ad un accesso per indice ad un array (anche se
le performance in questo caso non credo siano un problema, � comunque
pi� macchinoso).
Buon anno
Concordo con Lucio. Btw, "per essere un po' più OO", io userei una
java.util.List (per l'OP, che potrebbe essere confuso dall'uso delle
interfacce, suggerisco direttamente l'uso di una java.util.ArrayList)
buon anno a tutti!
Sarebbe piu' object oriented perche' il posto diventerebbe un oggetto.
La mappa dovrebbe essere qualcosa come
Map<Posto, Label> labelNomePostoMap
Non credo che l'ordinamento debba essere mantenuto, quindi un HashMap
dovrebbe andare bene.
L'accesso sarebbe
mappa.get(giocatore.getPosto()).setText(giocatore.getNome());
Il motivo per cui io lo consideri piu' OO, e' perche il posto puo'
cambiare, e non essere limitato ad un numero
Buon anno
Oliver
for(int posto = 0; posto < numGiocatori; posto++)
nomeGiocatore[ posto ] = ?? come l'associo l'istanza della label ??
L'unica soluzione che mi sta venendo in mente è di utilizzare un altro
array d'appoggio. Ovvero:
postoGiocatore[ 0 ] = jlabel0;
postoGiocatore[ 1 ] = jlabel1;
...
postoGiocatore[ 9 ] = Jlabel9;
e poi
for(int posto = 0; posto < numGiocatori; posto++)
nomeGiocatore[ posto ] = postoGiocatore[ posto ];
Esistono altre soluzioni?
grazie mille anticipatamente