
Java - Použití parametru metody jako matematického znaku
Dobrý den,
Vytvořil jsem tenhle příklad
public class MathematicalOperatorInParameter {
public static void main(String[] args) {
System.out.println(addition_or_subtraction(100, 50, true));
System.out.println(addition_or_subtraction(100, 50, false));
}
public static int addition_or_subtraction(int number, int number2, boolean addition) {
if (addition) {
return number + number2;
} else {
return number - number2;
}
}
}
Jde o to, že mně přijde zbytečné používat podmínku jenom kvůli operátoru. V tomhle případě to asi nevadí, ale pokud bude výpočet čísel mnohem složitější, tak bude nepřehledné to tam psát dvakrát.
Proto se chci, prosím Vás, zeptat, jestli je možné použít parametr jako operátor?
Děkuji
Nelze.
Myslel jsem něco jako napsat to jako řetězec a následně převést na operátor? Navíc, nevím jestli by šlo nějak využít, že + a + = +, + a - = -.
Pokud myslis eval String (treba "5+4"), tak to v Java lze treba pres zavolani JS engine....
https://stackoverflow.com/questions/2605032/is-there-an-eval-function-in-java
A taky je potřeba dodat B - tedy že výkon půjde do kytek.
To uz davno nemusi byt pravda...
(GraalVM)
Promiňte, ale jak to použiju? Java 15 to očividně má, ale přesto mně NetBeans nenabízí žádný import, pokud tuto třídu použiju.
Prave v JDK15 byl Nashorn Engine z JDK odstranen. Coz jsem ani nevedel, ze bylo v planu...
Nicmene Wikan ma pravdu, ja bych to taky nepouzival. To uz radeji nejakou tu java knihovnu. Pripadne lepe popis jaky mas presne problem...
To nejde. A ani mě nenapadá důvod, proč by to jít mělo. To co řešíš, se určitě dá vyřešit mnohem lépe.
Binárny operátor si môžeš poslať ako parameter: BinaryOperator<T> binaryOperator;
Prípadne, keď sú to len čísla typu int, tak rovno IntBinaryOperator.
Napr.:
final IntBinaryOperator addition = (a, b) -> a + b;
final IntBinaryOperator subtraction = (a, b) -> a - b;
V metóde potom len aplikuješ: return binaryOperator.apply(number, number2);
Díky, ale nejlepší asi bude způsob uvedený níže ohledně násobení +1 a -1.
Bez podmínky stačí pouze funkce addition a buď vložit -number2 anebo jako třetí argument zadat +1 či -1 a vynásobit s ním number2.
Díky. Souhlasím, to bude asi nejlepší způsob.