[java] String als formule

Pagina: 1
Acties:
  • 126 views sinds 30-01-2008
  • Reageer

  • Robertstoppels
  • Registratie: September 2003
  • Laatst online: 15-08-2023
Ik ben bezig met een spelletje. Game of 24. De meesten van jullie kennen dit spelletje wel van de flippo's. Je moet met 4 getallen 24 maken.

Nu zit ik met het probleem dat de gebruiker een 'formule' moet kunnen intypen met de oplossing. (bijv.: " (1+2)*3*1"). Vervolgens moet de pc deze 'formule' uitrekenen. Ik krijg het alleen niet voorelkaar om dit te doen. Ik heb het al geprobeert met parseInt en Integer.valueOf() maar die kunnen van de string geen waarde berekenen.

Met de search kon ik alleen vinden dat ik de hele string uit elkaar moet halen en zo stuk voor stuk alles berekenen. Dit is mij echter veel te omslachtig.

Ik heb het al geprobeerd met Integer.valueOf(naam); maar dat werkte ook niet omdat bijv. de formule " 4+4" geen integer is.

Wie weet een snelle manier om de waarde van een string met daarin een formule te berekenen?

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Als je zeker weet dat de input correct genoeg is, dan kan je toch iets van eval gebruiken? Java is voor mij te lang geleden of de functie ook zo heet, dus dat moet je even uitzoeken.

HTH

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 15-05 06:45
Ik zou 'm toch maar echt parsen. Echt heel ingewikkeld is dat ook niet, als je een beetje weet hoe een parser werkt. En zoniet, dan is het een mooie gelegenheid om het te leren. ;)

  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 18-05 09:50

pjvandesande

GC.Collect(head);

Je moet hem iig uit elkaar plukken, daarna kun jezelf kijken wat voor rekentekens (+, -, etc) er gebruikt worden en hiermee gaan rekeken.

Naar mijn weten is er niet zo een functie voor o.i.d, maar ik kan het mis hebben.

  • Darth Punk
  • Registratie: Juli 2001
  • Laatst online: 16-05 19:28

Darth Punk

professionalized prutz0r

nou weet ik niet in welke taal je programmeert, maar ik heb een vermoeden dat het csharp is.
als in een string wilt parsen naar een getal dan doe je dat met integer blaat = Convert.toInt32(je string) dit voorbeeldje werkt dus alleen in csharp in visual studio

update: heb niet goed gelezen: 8)7

als je string zoals 4+4 wilt parsen, dan zal je die gehele string moeten uitkleden. dus met een for en een if loopje ga je kijken naar een getal. komt er na een getal een +, - of whatever dan slaje dat getal op in een variable. btw die string kan je benaderen als een array. nou heb ik je wel genoeg geholpen, suc6 :)

[ Voor 55% gewijzigd door Darth Punk op 06-12-2004 13:27 ]

i want LART!


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Je zult er ieder geval een parser voor moeten schrijven, want er bestaat ieder geval in java standaard niks wat dit voor je doet.

Met een standaard for loopje zal ook niet makkelijk zijn aangezien je dan geen rekening houdt met haakjes en de prioriteit van de operators.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
Zo te zien hoef je niet met priorieiten te rekenen, alleen haakjes. Dan is het voldoende om dit te parsen mbv een stack. Zie de uitleg in http://forum.java.sun.com...D=2570888&threadID=503099

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 15-05 06:45
Glimi: dat werkt alleen zo in RPN. In dit geval lijkt het mij toch echt makkelijker om te tokenizen, en vervolgens een simpele parse tree op te bouwen, door achtereenvolgens de haakjes en de binaire operaties te groeperen (dan kun je in theorie ook nog relatief makkelijk prioriteiten toevoegen, als je de twee binaire operaties in een aparte pass neemt).

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 09-04 22:08
Tja, 't is Java he. In TC++PL van Stroustrup staat zo'n parser als voorbeeld. Heel erg moeilijk is het dus niet. Dit is nog simpeler omdat je geen nummers maar alleen cijfers hoeft te parsen.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


Verwijderd

of hier:

http://www.beanshell.org/...Shell_in_Your_Application

(weet niet zeker of je zoveel power nodig hebt als BSF, maar het werkt iig en je hebt er zelf geen werk aan...)
Pagina: 1