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

Como hacer una factura en Java (Proyecto)

Tiempo atras me pidieron un ejemplo de como realizar un reporte con iReport tipo factura, recibo o como le llamen, compl[...]

Efecto de explosión al abrir un JPanel

En este tutorial crearemos un interesante efecto de explosión al momento de abrir un JPanel, este efecto puede extenders[...]

Crear web multi-lenguaje con php

En este tutorial realizaremos un proyecto web de un «sitio multi lenguaje» o «web multi idiomas» como prefieran llamarlo[...]

Control de Paginación (Pagination) en tus Apps FX

El control de paginación de JavaFX (Pagination) se usa para navegar a través de varias paginas de contenido divididas en[...]

Hola Mundo con Slim Framework

Slim es un micro framework para PHP que nos ayuda a escribir rápidamente aplicaciones Web y APIs sencillas pero poderosa[...]

Crear un plugin wordpress «Banned Word»

En este post, escribiremos un sencillo plugin para wordpress el cual consistirá en reemplazar palabras en los comentario[...]