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

Actualizar JComboBox al cambiar valor de otro JComboBox

Cuando se trabaja con base de datos, estos datos son dinámicos, cambian con el tiempo y es necesario que esos cambios se[...]

Blog MVC – El theme y primer controlador [p3]

Tercera parte del tutorial [Crea tu blog con el patrón MVC y php] En este post trabajaremos en el Theme del blog, agrega[...]

Crea una libreria TimeChooser – Selector de Tiempo

En este post crearemos un componente gráfico para java que nos permitirá seleccionar la hora del día de una manera senci[...]

JavaScript: Script y Web para generar banderas ondeando

Online Flag Waver es una páginas web con la que podemos generar banderas ondeando con la textura que elijamos ya sea des[...]

Mapas en HTML5 – Uniendo todo – Parte 6

Última parte del tutorial «Mapas interactivos HTML5», vamos uniendo todo todo el código. En la parte 5 de este tutorial,[...]

Tablas virtuales en java (View)

Una Vista (View) es una Tabla Virtual cuyo contenido está definido por una consulta (SELECT), al igual que una tabla rea[...]