Aprende Java Aprende Php Aprende C++ Aprende HTML 5 Aprende JavaScript Aprende JSON Aprende MySQL Aprende SQLServer Aprende Visual Basic 6 Aprende PostgreSQL Aprende SQLite Aprende Redis Aprende Kotlin Aprende XML Aprende Linux VSC Aprende Wordpress Aprende Laravel Aprende VueJS Aprende JQuery Aprende Bootstrap Aprende Netbeans Aprende Android
Sigueme en Facebook Sigueme en Twitter Sigueme en Instagram Sigueme en Youtube Sigueme en TikTok Sigueme en Whatsapp
Home / Java / Evaluar expresiones matemáticas en Java con JavaScript

Evaluar expresiones matemáticas en Java con JavaScript

Por jc mouse miércoles, junio 22, 2016

Java 8 trae consigo una nueva versión del motor de JavaScript llamada Nashorn, este motor introduce mejoras de rendimiento y compatibilidad con las nuevas características del lenguaje.

A continuación vamos a ver un ejemplo de cómo usar librerías escritas en JavaScript desde Java para evaluar expresiones matemáticas.

Necesitamos:

  • IDE Netbeans o Eclipse
  • Java 1.8
  • Liberia JavaScript MathJS descarga la versión que esta comprimido «math.min.js«
  • Conocimientos sobre Java y Javascript

Paso 1. El Proyecto

Crea un nuevo proyecto Java Application que se llamara «JavaMathJS» y crea los paquetes necesarios, crea también una clase Main. Descarga la librería «math.min.js» y añade al paquete donde esta la clase main como se ve en la siguiente imagen.

math expresion

Paso 2. El Código

Abre la clase Main y añade los siguientes import

import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.io.UnsupportedEncodingException;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;

Creamos una instancia al manejador de Script de Java

ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("nashorn");

Cargamos la librería JavaScript que en est ejemplo estara en el mismo paquete que nuestra clase java

InputStream inputStream = Main.class.getClass().getResourceAsStream("/net/jc_mouse/math/math.min.js");
Reader reader = new InputStreamReader(inputStream, "utf-8");
engine.eval(reader); 

Podemos, claro esta cargar el archivo JS desde otra ubicación en el disco, incluso desde Internet

Finalmente si queremos hacer uso de funciones propias de la librería «math.min.js«, hacemos lo siguiente:

//se evalua en javascript la expresion matematica
engine.eval("var value = math.atan2(3, -3) / math.pi; ");
//recupera el valor de la variable evaluada
Object object = engine.get("value");   
//imprime en consola
System.out.println("Expresion matematica");
System.out.println("math.atan2(3, -3) / math.pi es igual a: " + object);//0.75

A continuación la clase final más unos ejemplos :

import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.io.UnsupportedEncodingException;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
/**
 * @see https://www.jc-mouse.net/
 * @author Mouse
 */
public class Main {
    
    public static void main(String[] args) {
        
        ScriptEngineManager manager = new ScriptEngineManager();
        ScriptEngine engine = manager.getEngineByName("nashorn");
        try{
            //se carga archivo JS en memoria
            InputStream inputStream = Main.class.getClass().getResourceAsStream("/net/jc_mouse/math/math.min.js");
            Reader reader = new InputStreamReader(inputStream, "utf-8");
            engine.eval(reader);     
            
            /*------ Ejemplo 1 ------*/
            //se evalua en javascript la expresion matematica
            engine.eval("var value = math.atan2(3, -3) / math.pi; ");
            //recupera el valor de la variable evaluada
            Object object = engine.get("value");   
            //imprime en consola
            System.out.println("Expresion matematica");
            System.out.println("math.atan2(3, -3) / math.pi es igual a: " + object);//0.75
            
            /*------ Ejemplo 2 ------*/
            //Operaciones encadenadas
            engine.eval("var value = math.chain(3)\n" +
                            "    .add(4)\n" +
                            "    .multiply(2)\n" +
                            "    .done(); ");
            object = engine.get("value");   
            System.out.println("Operaciones encadenadas");
            System.out.println("math.chain(3).add(4)..multiply(2).done() es igual a " + object);//14
            
            /*------ Ejemplo 3 ------*/
            //evaluar expresiones matematicas
            engine.eval("var value = math.eval('sqrt(3^2 + 4^2)'); ");
            object = engine.get("value");   
            System.out.println("Evaluar expresiones matematicas");
            System.out.println("sqrt(3^2 + 4^2) = " + object);// 5
                        
            /*------ Ejemplo 4 ------*/
            //definir funciones
            engine.eval("var f = math.eval('f(x) = x ^ a', {a:3});");
            engine.eval("var value = f(2);");
            object = engine.get("value");   
            System.out.println("Definir funciones");
            System.out.println("f(x)=x^a donde a=3  es igual " + object);// 8
            
        }catch (ScriptException ex) {
            System.err.println(ex.getMessage());
        } catch (UnsupportedEncodingException ex) {
            System.err.println(ex.getMessage());
        }
    }
    
}

Ejecutando tenemos:

mhat java script

Eso es todo 🙂

Tags

Artículos similares

BootChess – Ajedrez en 487 bytes

Desde que se crearon los videojuegos para computadora, el espacio de almacenamiento y memoria han sido siempre un proble[...]

SQLite INSERT, UPDATE, DELETE, QUERY

En este segundo post sobre Android y SQLite, veremos el uso de los métodos de gestión de base de datos más utilizados, e[...]

Contraseñas con emojis en java

Semanas atrás leí un articulo en el que se pensaba implementar los emojis como contraseñas en los dispositivos con andro[...]

Realiza pruebas Unitarias en Java

Una Prueba Unitaria, es una forma de comprobar que nuestro código, hace lo que se supone debe hacer; es decir, se asegur[...]

ODBC acces y php POO

En este tuto crearemos una clase para conectarse con una base de datos Access y ademas se implementan dos metodos para r[...]

Lo nuevo de HTTP Client

Una de las novedades de Java 9 y 10 aunque por el momento en modo de prueba (jdk.incubator.http) es el Cliente HTTP el c[...]