Sigueme en Facebook Sigueme en Twitter Sigueme en Instagram Sigueme en Youtube
JC Mouse Bolivia
Index / Java / Evaluar expresiones matemáticas en Java con JavaScript

Evaluar expresiones matemáticas en Java con JavaScript

Autor 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

Si te ha gustado podrías compartirlo o dejar un comentario. ¡Muchas gracias!
Autor: JC Mouse

Yo soy yo :) JC Mouse, Soy orgullosamente boliviano soy fundador y CEO de la web jc-Mouse.net uno de las pocas web en emprendimiento y tecnología en Bolivia.

Toda la información que encuentres en este sitio es y sera completamente gratis siempre, puedes copiar, descargar y re-publicar si así lo deseas en otros blogs o sitios web, solo te pido a cambio que dejes una referencia a esta web. Esto nos ayuda a crecer y seguir aportando. Bye

Enjoy! :)

También Te Podría Interesar

Introducción a VueJS framework para el desarrollo FrontEnd

Introducción a VueJS framework para el desarrollo FrontEnd

Vue.js es un framework progresivo para la creación de interfaces de usuario de una sola página creado por Evan You. Pero...

Operadores de comparación en Bash

Operadores de comparación en Bash

En este post conoceremos algunos de los operadores de comparación que existen en Linux y realizaremos unos ejercicios pa...

Código CSS en Java/Netbeans

Código CSS en Java/Netbeans

Los objetos como JLabel o JButton nos permiten hacer uso de código CSS en su propiedad TEXT, asi podemos adornar el text...

Editor online HTML5

Editor online HTML5

JsFiddle es una herramienta que se puede utilizar de muchas maneras. Se puede utilizar como un editor en línea para crea...

CRC32: Verificación de Redundancia Cíclica

CRC32: Verificación de Redundancia Cíclica

El CRC o Verificación de Redundancia Cíclica o Comprobación de redundancia cíclica  es una técnica utilizada para detect...

Crea tu propia aplicacion para realizar llamadas

Crea tu propia aplicacion para realizar llamadas

En este tutorial Android Bolivia 🙂 construiremos una sencilla aplicación para realizar llamadas por teléfono, aprenderem...

Comparte lo que sabes

Categorias

Últimas entradas

En este post veremos un ejemplo sencillo de como descargar desde Internet archivos de cualquier tipo (*.jpg, *.png, *.gi...

FFmpeg es una colección de software libre capaz de decodificar, codificar, transcodificar, mux, demux, transmitir, filtr...

The Age of AI o «La era de la Inteligencia Artificial»,  es una serie de 8 documentales de Youtube Original, presentados...

La comunidad 3D Buzz  era una de los lugares donde la gente curiosa de aprender a realizar videojuegos buscaba recursos...

Herramientas

Generador de Enlaces a Whatsapp