Newsgroup: it.comp.java
Titolo: Trasformare una stringa in variabile

Salve,
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

 trasformandola, come label.setText("Nome Giocatore") ?
Lascia perdere, non � strada che spunta. 

 trasformandola, come label.setText("Nome Giocatore") ?
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

> Lascia perdere, non è strada che spunta.
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

 Per un esame universitario
lol...evviva l'universit�! :)
Mai sentito parlare degli array?
nomeGiocatore[posto].setText(nomeGiocatore);
contanteGiocatore[posto].setText(contanteGiocatore);


 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

per essere un po' piu' OO userei una Map
Buon anno nuovo
Oliver

 per essere un po' piu' OO userei una Map
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!

 Potresti spiegarmi perché una Map sarebbe più OO?
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

Per adesso ho utilizzato gli array per salvare le istanze delle
jlabel. Metodo che funziona egregiamente quando al gioco partecipano
10 giocatori, ma se volessi dare l'opportunità di scegliere quanti
giocatori far sedere al tavolo, il problema si ripresenterebbe.
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