Avatar billede kovalt Nybegynder
28. november 2002 - 14:05 Der er 24 kommentarer og
3 løsninger

variabelnavne

er det muligt at læse en linie der indeholder et ord fra en fil og derefter bruge dette som variabelnavn?
Avatar billede di8leva Nybegynder
28. november 2002 - 14:08 #1
ikke som variabelnavn

hvorfor skulle du vilje gøra det?
Avatar billede hsg Nybegynder
28. november 2002 - 14:11 #2
Ikke direkte nej.
Avatar billede bearhugx Nybegynder
28. november 2002 - 14:15 #3
Kort sagt, så kan det ikke lade sig gøre...

Som di8leva også skriver, så har jeg svært ved at se grunden til at skulle lave sådanne krumspring...

Et variabelnavn er til for at give en logisk etikette for, hvad der er for nogle data, man håndterer ... Hvis man umiddelbart kan udskifte f.eks. variablen "tidspunkt" med ordet "medisterpølse", så vil det jo ikke give nogen mening ... Men samtidig vil programmets kørsel være uændret --- Det eneste, som er sket er, at kodningen er blevet besværret af navne, som ikke hører til...

/Søren Munk Skrøder

PS : Kan du give en forklaring på, hvorfor du ønsker at hente variablenavne ind fra en fil ???
Avatar billede bearhugx Nybegynder
28. november 2002 - 14:16 #4
hsq >> hvordan har du tænkt dig at gøre det (bortset fra at oprette klassen dynamisk)
Avatar billede hsg Nybegynder
28. november 2002 - 14:24 #5
bearhugx: Man kunne lave et Object array.
Allokere objecterne efterhånden som man fik brug for dem. Typecasting osv osv
og så lægge dem i en Hashtable med det læste ord som key.
Men som du selv nævner, jeg ville ikke ane hvorfor man ville gøre det.
Og det giver jo også problemer i forhold til variable som int, double mv.
Avatar billede carstenknudsen Nybegynder
28. november 2002 - 14:24 #6
Som nævnt ovenfor kan det ikke lade sig gøre, men
du kan lave en HashMap hvor du associerer det
indlæste navn med et objekt, det er nok det tætteste
på det du ønsker der er muligt.
String indlaest = ....; // indlæst fra fil
HashMap map = new HashMap();
Object o = new Object();
map.add( indlaest, o );
Object p = map.get( indlaest );
Avatar billede bearhugx Nybegynder
28. november 2002 - 14:28 #7
Ja -.- men i dette tilfølde har man jo ikke lavet "variablenavne" - men har bare lavet entries í en Key-Value-struktur :-)
Avatar billede bearhugx Nybegynder
28. november 2002 - 14:29 #8
Jeg kan ikke stave -- tilfølde == tilfælde :-))
Avatar billede hsg Nybegynder
28. november 2002 - 14:30 #9
korrekt, og svaret må jo så stadig være: Kan ikke lade sig gøre.
Det andet er blot en besynderlig workaround.
Avatar billede carstenknudsen Nybegynder
28. november 2002 - 14:33 #10
bearhugx: nej,men der står "det er nok det tætteste
på det du ønsker der er muligt." Der er heller ikke
noget besynderligt ved den workaround, det kan være
at det i virkeligheden er det der skal til.
Avatar billede bearhugx Nybegynder
28. november 2002 - 14:35 #11
Min kommentar var møntet på hsq's indlæg -- ikke dit ... :-)

Jeg kunne dog godt tænke mig at høre en kommentar fra spm'ets forfatter: kovalt...

/Søren
Avatar billede kovalt Nybegynder
28. november 2002 - 14:36 #12
Jeg bliver logget af hver gang jeg skriver noget
Avatar billede kovalt Nybegynder
28. november 2002 - 14:37 #13
Det er fordi jeg skal lave et meget simpelt adventurespil i noget skoleværk. Et af kravene er at jeg kan indlæse scenarier fra en bagvedliggen text.fil.

Mit problem er at jeg ikke kan finde ud af hvorledes jeg kan forbinde de rum der indlæses fra filen således jeg kan skrive eks. "go west".
Avatar billede carstenknudsen Nybegynder
28. november 2002 - 14:39 #14
Giv hvert rum et navn og smid navn og det indlæste
i en HashMap, så kan du let få beskrivelsen af rummet ud.
Avatar billede kovalt Nybegynder
28. november 2002 - 14:40 #15
Min plan var at skrive en txt-fil hvor jeg skrev noget på formen:

rum1, rumNord, rumØst, rumSyd, rumVest.

herefter kunne rum2 (som ligger nord for rum1) defineres som:

rum2, rum1, rumØst, rumSyd, rumVest


Men jeg er rimelig blank
Avatar billede bearhugx Nybegynder
28. november 2002 - 14:40 #16
Ok ... Men så tror jeg ikke du får brug for at lave dynamiske variable-navne .. Mere at du bør lave en Key-Value-struktur, som foreslået af hsq og carsten
Avatar billede kovalt Nybegynder
28. november 2002 - 14:40 #17
jeg har brugt for at lagre mere end én ting om hver rum
Avatar billede bearhugx Nybegynder
28. november 2002 - 14:43 #18
Ok ... prøv følgende

[rum1]
  Dette er en beskrivelse af rum 1
  [content="en flaske"]
  [exit_north=rum3]
  [exit_east=rum6]
  [exit_west=]
  [exit_south=rum2]
[rum1-slut]
osv...
Avatar billede hsg Nybegynder
28. november 2002 - 14:44 #19
Så lav en klasse der beskriver dit rum. Herunder fx. rum nummer, retninger, kræves der lys her, dør man i dette rum (et stort hul fx) og hvad du ellers kan finde på.
For hver rum linie i din fil laver du en instans af klassen og ned i en form for key-value struktur. Voila!
Avatar billede bearhugx Nybegynder
28. november 2002 - 14:44 #20
de fire "exits" er forudsat at man kun kan bevæge sig north, south, east og west...
Avatar billede bearhugx Nybegynder
28. november 2002 - 14:46 #21
definitionen kan evt laves i XML :-)
Avatar billede kovalt Nybegynder
28. november 2002 - 14:47 #22
hsq: -->

hvordan får jeg alle parameterne over i objektet..... skal de skrives som en kommasepereret liste oder?
Avatar billede hsg Nybegynder
28. november 2002 - 14:50 #23
Det bestemmer du jo selv. Men hvis det nu er en komma separeret liste, så er StringTokenizer det der falder mig først for.
Men du er nødt til at smide værdierne over variabel for variabel.
Eller bruge reflect - sparer en del linier.
Avatar billede kovalt Nybegynder
28. november 2002 - 15:02 #24
kan jeg "genbruge" den samme variabel til at fylde alle parameterne over i objektet
Avatar billede hsg Nybegynder
28. november 2002 - 15:25 #25
Nedenstående kode kan sikkert gøres noget pænere,
men det er da een mulighed.
Herunder antages at Rum indeholder String attributter.
Forbehold for stave- og kompileringsfejl. :-)

Hashtable rum = new Hashtable();
Rum r = null;
String rec = null;
BufferedReader inp = new BufferedReader(new FileReader("din inputfil"));
while ((rec = inp.readLine() != null) {
  StringTokenizer st = new StringTokenizer(rec,",");
  r = new Rum();
  String rumnr = st.nextToken(); // Fx. eller du kan lave en counter
  r.setRum1(st.nextToken());
  r.setRum2(st.nextToken());
  osv...
  rum.put(rumnr,r);
}
Avatar billede kovalt Nybegynder
01. december 2002 - 11:19 #26
du skal ilge sende et svar hsq
Avatar billede hsg Nybegynder
02. december 2002 - 07:46 #27
Nå ja så laver vi det til et svar :-)
Håber det hjalp
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester