Archief - [PROG]JAVA String omzetten in statement

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

El Di@bLo

Legacy Member
Hey,

is het mogelijk om een string om te zetten in een statement?
Bij men programma moet de gebruiker een bewerking ingeven, bv "5+9*5/22"

Is het mogelijk om ervoor te zorgen dat ik
int i = "de ingegeven bewerking"
kan verkrijgen?

Ik heb al geprobeerd door de getallen in een array te zetten, maar voor de bewerkingen wordt het moeilijk door de voorrangsregels (eerst machten en wortels, dan vermenigvuldigingen en delingen, etc.)

Dus weet er iemand raad?

CyberOps

Legacy Member
gaat ge indd moeten parsen. om tijd te sparen zou ik ook een bestaande lib gebruiken...

El Di@bLo

Legacy Member
Volgens mij lukt het niet goed om die JEP te installeren.

Ik heb zo de classpath toegevoegd door rechtermuisknop op "Deze computer" => geavanceerd => Omgevingsvariabelen

Maar als ik dus in men project in Together
org.nfunk.jep.JEP myParser = new org.nfunk.jep.JEP();
typ, verwacht hij dat ik een package org.nfunk.jep maak met een klasse JEP in.

Wat doe ik verkeerd?

SMa

Legacy Member
lol, ik herken deze opgave... :p

je pakt het best via postfix-notatie aan :)

[BAT] Hydra

Legacy Member
Code:
private static String[] splitExpression(String exp, String p) {
	java.util.Scanner scan = new java.util.Scanner(exp);
	scan.useDelimiter(p);
	try {
		return new String[]{scan.next(),scan.next()};
	} catch(java.util.NoSuchElementException e) {
		return null;
	}
}

public static int parseExpression(String exp) {
	try {
		return Integer.parseInt(exp);
	} catch (NumberFormatException e) { }
	if(splitExpression(exp,"\\+") != null)
		return parseExpression(splitExpression(exp,"\\+")[0]) + parseExpression(splitExpression(exp,"\\+")[1]);
	if(splitExpression(exp,"-") != null)
		return parseExpression(splitExpression(exp,"-")[0]) - parseExpression(splitExpression(exp,"-")[1]);
	if(splitExpression(exp,"/") != null)
		return parseExpression(splitExpression(exp,"/")[0]) / parseExpression(splitExpression(exp,"/")[1]);
	if(splitExpression(exp,"\\*") != null)
		return parseExpression(splitExpression(exp,"\\*")[0]) * parseExpression(splitExpression(exp,"\\*")[1]);
	return -1;
}

dit zou moeten volstaan (voor enkel binaire operaties zoals /,*,+,-)

gewoon parseExpression(yourExpression) oproepen :)
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan