Ⅰ java 循環演算法
importjava.text.MessageFormat;
importjavax.script.ScriptEngine;
importjavax.script.ScriptEngineManager;
importjavax.script.ScriptException;
publicclassT{
梁盯privatestaticfinalStringT="{0}+13*{1}/{2}+{3}+12*{4}-{5}-11+{6}*{7}/{8}-10";
publicstaticvoidmain(String[]args)throwsScriptException{
int[]a=initArray(9);
p(0,a);
}
privatestaticvoide(int[]a)throwsScriptException{
Stringe=MessageFormat.format(T,a[0],a[1],a[2],a[3],橡備和a[4],a[5],
a[6],a[7],a[8]);
ScriptEngineManagermanager=newScriptEngineManager();
ScriptEngineengine=manager.getEngineByName("javascript");
Numbern=(Number)engine.eval(e);
if(n.intValue()==66&&n.doubleValue()==n.intValue()){
System.out.println(e+"="+66);
}
}
privatestaticint[]initArray(intn){
int[]a=newint[n];
for(inti=0;i<a.length;i++){
a[i]=i+1;
}
returna;
}
privatestaticvoidp(inti,int[]a)throwsScriptException{
if(i==a.length-1){
e(a);
return;
}
p(i+滾爛1,a);
for(intj=i+1;j<a.length;j++){
swap(i,j,a);
p(i+1,a);
swap(j,i,a);
}
}
privatestaticvoidswap(inti,intj,int[]a){
inttemp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
Ⅱ 【高分懸賞】Java實現一個方法計算一個只有加減法運算的表達式的值
這個問題很簡單,只有加減運算,沒有運算優先順序,不需要用到堆棧就可以。下面是代碼:
publicclassApp{
publicstaticintA(Stringex)throwsException{
intresult=0;
Stringstr="";
for(inti=0;i<ex.length();i++){
charch=ex.charAt(i);
if(ch>='0'&&ch<='9'){
str+=ch;
}elseif(ch=='+'||ch=='-'){
result+=Integer.parseInt(str);
str=""+ch;
}elseif(ch==''){
continue;
}else{
thrownewException("無效的表達式。");
}
}
if(str!=""){
result+=Integer.parseInt(str);
}
returnresult;
}
publicstaticvoidmain(String[]args)throwsException{
intresult=A("1-2+3+4-23");
System.out.println("result="+result);
}
}
運行結果:
Ⅲ 有沒有哪個Java 8妙用Nashorn引擎的好例子
使用Java8,Nashorn大大提高了JavaScript 引擎引入,以取代現有的Nashorn Java腳本引擎。提供2至10倍更好的性能,因為它直接編譯代碼在存儲器,並傳遞到位元組碼JVM.Nashorn使用invokedynamics函數,在Java7引入以提高性能。
jjs
對於Nashorn引擎,JAVA8引入了一個新的命令行工具,JJS到控制台執行Java腳本代碼。
解讀js文件
創建並保存sample.js在 C:> JAVA 文件夾。
sample.jsprint('Hello World!');
打開控制台並使用下面的命令。
C:\JAVA>jjs sample.js
看到結果
Hello World!
JJS在交互模式
打開控制台並使用下面的命令
C:\JAVA>jjs
jjs> print("Hello, World!")
Hello, World!
jjs> quit()
>>
傳遞參數
打開控制台並使用下面的命令。
C:\JAVA> jjs -- a b c
jjs> print('letters: ' +arguments.join(", "))
letters: a, b, c
jjs>
在JAVA調用JavaScript
使用ScriptEngineManager,JavaScript代碼用Java編寫可以被調用。
示例
選擇使用任何編輯器創建以下java程序在 C:/> JAVA
Java8Tester.javaimport javax.script.ScriptEngineManager;
import javax.script.ScriptEngine;
import javax.script.ScriptException;
public class Java8Tester {
public static void main(String args[]){
ScriptEngineManager scriptEngineManager = new ScriptEngineManager();
ScriptEngine nashorn = scriptEngineManager.getEngineByName("nashorn");
String name = "Mahesh";
Integer result = null;
try {
nashorn.eval("print('" + name + "')");
result = (Integer) nashorn.eval("10 + 2");
}catch(ScriptException e){
System.out.println("Error executing script: "+ e.getMessage());
}
System.out.println(result.toString());
}
}
驗證結果
使用javac編譯器編譯如下類
C:\JAVA>javac Java8Tester.java
現在運行Java8Tester看到的結果
C:\JAVA>java Java8Tester
看到結果
Mahesh
12
從JavaScript調用Java
下面的例子將展示如何導入和使用Java類的Java腳本。
創建並保存 sample.js 在 c: > JAVA 文件夾.
sample.jsvar BigDecimal = Java.type('java.math.BigDecimal');
function calculate(amount, percentage) {
var result = new BigDecimal(amount).multiply(
new BigDecimal(percentage)).divide(
new BigDecimal("100"), 2, BigDecimal.ROUND_HALF_EVEN);
return result.toPlainString();
}
var result = calculate(568000000000000000023,13.9);
print(result);
打開控制台並使用下面的命令。
C:\JAVA>jjs sample.js
看到結果
78952000000000000003.20
Ⅳ java如何調用javascript的函數
[java] view plainprint?
<span style="font-size:18px;">package suggestion16;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.Scanner;
import javax.script.Bindings;
import javax.script.Invocable;
import javax.script.ScriptContext;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
public class ScriptText {
public static void main(String[] args) throws FileNotFoundException, ScriptException, Exception {
ScriptEngine engine = new ScriptEngineManager().getEngineByName("javascript");
Bindings bind = engine.createBindings();
bind.put("factor", 2); //這里綁定一個factor的值為2.
engine.setBindings(bind,ScriptContext.ENGINE_SCOPE);
Scanner input = new Scanner(System.in);
while(input.hasNext())
{
int first = input.nextInt();
int sec = input.nextInt();
System.out.println("輸入的參數為:"+ first+ " , " + sec);
engine.eval(new FileReader("E:/cal.js"));
if(engine instanceof Invocable)
{
Invocable in = (Invocable)engine;
Double result = (Double)in.invokeFunction("cal",first,sec);
System.out.println("運算結果為:" + result.intValue());
}
}
}
}
</span>
其中的「E:/cal.js」就是我們文件的保存路徑。並且這個主函數可以循環的輸入。
我們運行一下這個程序得到的結果如下:
[html] view plainprint?
<span style="font-size:18px;">1
2
輸入的參數為:1 , 2
運算結果為:1
</span>
上面也就是 調用了 1 + 2 - 2 = 1 ,所以結果為1
我們將js文件中的function方法改變下,改編為下面的函數:
[javascript] view plainprint?
<span style="font-size:18px;">function cal(var1,var2)
{
return var1+var2*factor;
}</span>
Ⅳ java怎麼利用動態編譯求四則運算式的結果貼代碼的最後注釋一下,免得我看不懂,求高手大神來回答
^這種東西都不需要動態編譯,你用javax.script.ScriptEngine這玩意就可以了
具體代碼版
ScriptEngineManager factory = new ScriptEngineManager();
權ScriptEngine engine = factory.getEngineByName("javascript");
System.out.println(engine.eval("1+2*3+4^2-(2-8*0.12)+1-2^1/2+5/12-0.12/0.21"));
Ⅵ java字元串轉運算符
樓主想要的,不就是js里的eval么……非要弄得這么復雜。
首先下載:http://www.beanshell.org/bsh-core-2.0b4.jar
在你類里寫:
String s="3>2";// 這里你可以自己拼內一下字元串
Interpreter bs=new Interpreter();
try {
System.out.println(bs.eval(s));
} catch (EvalError e) {
e.printStackTrace();
}
這樣容就可以,字元串可以為更復雜的運算,不單單是邏輯運算
Ⅶ Java中怎麼能實現從鍵盤輸入幾個數字後進行四則運算
packagetest;
importjava.util.Scanner;
importjavax.script.ScriptEngine;
importjavax.script.ScriptEngineManager;
importjavax.script.ScriptException;
publicclassA1
{
publicstaticvoidmain(String[]args)
{
=newScriptEngineManager();
ScriptEnginese=sem.getEngineByName("js");
Scannerscanner=newScanner(System.in);
System.out.println("輸入幾個數字後進行四則運算:(直接回車退出程序)");
Objectresult=null;
while(scanner.hasNextLine())
{
try
{
Stringline=scanner.nextLine();
if("".equals(line))
{
break;
}
result=se.eval(line);
System.out.println(result);
}
catch(ScriptExceptione)
{
System.err.println("輸入不正確!重新輸入:");
continue;
}
}
scanner.close();
}
}
Ⅷ 請問,java中怎麼用html和js寫出一個能實現數字排序的程序
<script>
function wr(str){
document.write(str+"<br><br>");
}
function sort(a,b,c,d,e){
var arr=new Array();
arr.push(a);
arr.push(b);
arr.push(c);
arr.push(d);
arr.push(e);
arr.sort( function(x, y){
if (x >余緩 y)
return 1;
if (x < y)
return -1;
}
);
return arr;
}
var result=sort(2,5,1,8,11);//隨便輸入5個數字
wr(result);
</script>
以上是JavaScript 代碼,java中可以用 script引擎 使用返罩JavaScript 代漏毀鬧碼
ScriptEngineManager factory = new ScriptEngineManager();
ScriptEngine engine = factory.getEngineByName("js");
Ⅸ java實現js的中一樣的函數方法
packageknow.t5;
{
publicstaticStringencode(Stringinput)
{
StringBuildersb=newStringBuilder(input.length()+16);
appendEncoded(sb,input);
returnsb.toString();
}
(StringBuildersb,Stringinput)
{
intsafe[]=SAFE_ASCII;
inti=0;
intc;
for(intlen=input.length();i<len;i+=Character.charCount(c))
{
c=input.codePointAt(i);
if(c<=127)
{
if(safe[c]!=0)
sb.append((char)c);
else
appendSingleByteEncoded(sb,c);
}else
{
appendMultiByteEncoded(sb,c);
}
}
returnsb;
}
(StringBuildersb,intvalue)
{
sb.append('%');
sb.append(HEX[value>>4]);
sb.append(HEX[value&15]);
}
(StringBuildersb,intvalue)
{
if(value<2048)
{
appendSingleByteEncoded(sb,192|value>>6);
appendSingleByteEncoded(sb,128|value&63);
}else
if(value<65536)
{
appendSingleByteEncoded(sb,224|value>>12);
appendSingleByteEncoded(sb,128|value>>6&63);
appendSingleByteEncoded(sb,128|value&63);
}else
{
appendSingleByteEncoded(sb,240|value>>18);
appendSingleByteEncoded(sb,128|value>>12&63);
appendSingleByteEncoded(sb,128|value>>6&63);
appendSingleByteEncoded(sb,128|value&63);
}
}
privatestaticfinalintSAFE_ASCII[];
privatestaticfinalcharHEX[]="0123456789ABCDEF".toCharArray();
static
{
SAFE_ASCII=newint[128];
for(inti=97;i<=122;i++)
SAFE_ASCII[i]=1;
for(inti=65;i<=90;i++)
SAFE_ASCII[i]=1;
for(inti=39;i<=57;i++){
if(i==43||i==44||i==47)
continue;
SAFE_ASCII[i]=1;
}
SAFE_ASCII[33]=1;
SAFE_ASCII[95]=1;
SAFE_ASCII[126]=1;
}
}
encodeURIComponent函數可以用上面的類方法代替,unescape可以用任意URLDecoder代替,btoa可以用任意Base64工具代替(參數為byte[]時需將字元串按utf8編碼),這個方案你可以試試效果
Ⅹ 用java設計,鍵盤輸入一個四則運算等式,判斷運算是否正確
Scannersc=newScanner(System.in);
Stringstr=sc.nextLine();
String[]arr=str.split("=");//根據等號分隔等式兩邊的字元串
ScriptEngineManagermanager=newScriptEngineManager();
ScriptEngineengine=manager.getEngineByName("js");
try{
Objectresult0=engine.eval(arr[0]);
Objectresult1=engine.eval(arr[1]);
System.out.println("等式左邊計算結果:"+result0);
System.out.println("等式右邊計算結果:"+result1);
if(result0==result1){
System.out.println("運算正確");
}else{
System.out.println("運算錯誤");
}
}catch(ScriptExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
主要使用的時候下面這些庫