日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

用java写四则混合运算,JAVA写的四则混合运算-JSP教程,Java技巧及代码

發布時間:2024/7/23 javascript 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用java写四则混合运算,JAVA写的四则混合运算-JSP教程,Java技巧及代码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這是一個四則混合運算程序,沒什么做優化,也沒做什么注釋,(人啊,總喜歡偷懶的.)

這個版本我已經定為了2.21版本.呵呵.

從最先的1.0到2.0的改動很大.除了運算思想沒動處,其它的都在2.0做了重新設計.

這種程序其實網上一大把(算法也好得多)。此僅為無聊找點事情做而已。

/**

*四則混合運算程序

*作者:黃劍武

*時間:2005年4月29日

*版本:2.21

*修改日志:2.0

*?1.更改表達式用戶輸入方式.

*?2.對用戶輸入的表達式進行有效性字符過濾.

*?3.使用double代替原int數值,并且使用嚴格浮點運算提高運算精度.

*?4.解除對運算數字只能是一位的限制.

*?5.優化了部分代碼.

*修改日志:2.1

*?? 1.加入表達式括號匹配功能.

*修改日志:2.2

*?? 1.加入表達式處理功能.

*修改日志:2.21

*?? 1.修改部分語法以支持jdk1.5中的泛型用法.

*/

import java.lang.reflect.array;

import java.util.*;

import java.util.regex.*;

import java.lang.*;

import java.io.*;

//測試用例:1-3*(4-(2+5*3)+5)-6/(1+2)=23

//測試用例:11.2+3.1*(423-(2+5.7*3.4)+5.6)-6.4/(15.5+24)=1273.4199746835445

class calculator

{

public static void main(string[] args) throws ioexception

{

string str_input;

double f_output;

while (true)

{

system.out.print(“輸入表達式: “);

system.out.flush();

str_input = getstring();

if (str_input.equals(“”))

{

break;

}

calculator calculator = new calculator();

//以下對輸入字符串做規則處理

str_input = calculator.checkexpression(str_input);

if (str_input.equals(“”))

{

system.out.println(”?? 表達式出錯? “);

}

//以下對輸入字符串做表達式轉換

vector v_compute = calculator.getexpression(str_input);

/*

for (int i=0;i

{

system.out.println(”? “+v_compute.get(i));

}

*/

//以下進行后綴表達式轉換

vector v_tmp_prefix = calculator.transformprefix(v_compute);

/*

for (int i=0;i

{

system.out.println(v_tmp_prefix.get(i));

}

*/

//以下進行后綴表達式運算

f_output = calculator.evaluateprefix(v_tmp_prefix);

system.out.println(“結果 = ” + f_output);

}

}

/**

*靜態方法,用來從控制臺讀入表達式

*/

public static string getstring() throws ioexception

{

inputstreamreader isr = new inputstreamreader(system.in);

bufferedreader br = new bufferedreader(isr);

string s = br.readline();

return s;

}

/**

*輸入字符串轉換.把從控制臺讀入的字符串轉成表達式存在一個隊列中.

*例:123+321 存為”123″”+””321″

*/

public vector getexpression(string str)

{

vector v_temp = new vector();

char[] temp = new char[str.length()];

str.getchars(0,str.length(),temp,0);

string fi = “”;

int x=0,i=0;

string regex_fig = “[\\.\\d]”;????????????????? //匹配數字和小數點

string regex_operator = “[\\+\\-\\*/\\(\\)]”;??? //匹配運算符(+,-,*,/)和括號(“(“,”)”)

pattern p_fig = pattern.compile(regex_fig);

pattern p_operator = pattern.compile(regex_operator);

matcher m = null;

boolean b;

while (i

{

character c = new character(temp[i]);

string s = c.tostring();

//system.out.println(“char c = “+s);

m = p_operator.matcher(s);

b = m.matches();

if (b)

{

//system.out.println(“matches operator”);

v_temp.add(fi);

fi=””;

v_temp.add(s);

}

m = p_fig.matcher(s);

b = m.matches();

if (b)

{

//system.out.println(“matches fig”);

fi=fi+s;

}

i++;

}

v_temp.add(fi);

return v_temp;

}

/**

*轉換中序表示式為前序表示式

*/

public vector transformprefix(vector v_expression)

{

vector v_prefix = new vector();

stack s_tmp = new stack();

string regex_float = “\\d+(\\.\\d+)?”;????? //匹配正浮點數

pattern p_float = pattern.compile(regex_float);

matcher m = null;

boolean b;

string str_elem = “”;

for (int i=0;i

{

str_elem = v_expression.get(i).tostring();

m = p_float.matcher(str_elem);

b = m.matches();

if (b)

{

v_prefix.add(str_elem);

}

if (str_elem.equals(“+”)||str_elem.equals(“-“))

{

if (s_tmp.isempty())

{

s_tmp.push(str_elem);

}

else

{

while(!s_tmp.isempty())

{

string str_tmp = s_tmp.peek();

if ( str_tmp.equals(“(“))

{

break;

}

else

{

v_prefix.add(s_tmp.pop());

}

}

s_tmp.push(str_elem);

}

}

if (str_elem.equals(“*”)||str_elem.equals(“/”))

{

if (s_tmp.isempty())

{

s_tmp.push(str_elem);

}

else

{

while(!s_tmp.isempty())

{

string str_tmp = s_tmp.peek();

if ( str_tmp.equals(“(“) || str_tmp.equals(“+”) || str_tmp.equals(“-“))

{

break;

}

else

{

v_prefix.add(s_tmp.pop());

}

}

s_tmp.push(str_elem);

}

}

if (str_elem.equals(“(“))

{

s_tmp.push(str_elem);

}

if (str_elem.equals(“)”))

{

while(!s_tmp.isempty())

{

string str_tmp = s_tmp.peek();

if (str_tmp.equals(“(“))

{

s_tmp.pop();

break;

}

else

{

v_prefix.add(s_tmp.pop());

}

}

}

}

while(!s_tmp.isempty())

{

v_prefix.add(s_tmp.pop());

}

return v_prefix;

}

/**

*前綴表示式求值

*/

public strictfp double evaluateprefix(vector v_prefix)

{

string str_tmp = “”;

double num1,num2,interans = 0;

stack s_compute = new stack();

int i = 0;

while(i

{

str_tmp = v_prefix.get(i).tostring();

if (!str_tmp.equals(“+”) && !str_tmp.equals(“-“) && !str_tmp.equals(“*”) && !str_tmp.equals(“/”))

{

interans = s_compute.push(double.parsedouble(str_tmp));

}

else

{

num2=(double)(s_compute.pop());

num1=(double)(s_compute.pop());

if (str_tmp.equals(“+”))

{

interans = num1+num2;

}

if (str_tmp.equals(“-“))

{

interans = num1-num2;

}

if (str_tmp.equals(“*”))

{

interans = num1*num2;

}

if (str_tmp.equals(“/”))

{

interans = num1/num2;

}

s_compute.push(interans);

}

i++;

}

return interans;

}

/**

*括號匹配檢測

*/

public boolean checkbracket(string str)

{

stack s_check = new stack();

boolean b_flag = true;

for (int i=0;i

{

char ch = str.charat(i);

switch(ch)

{

case (:

s_check.push(ch);

break;

case ):

if (!s_check.isempty())

{

char chx = s_check.pop();

if (ch==) && chx!=()

{

b_flag = false;

}

} else {

b_flag = false;

}

break;

default:

break;

}

}

if (!s_check.isempty())

{

b_flag = false;

}

return b_flag;

}

/**

*表達式正確性規則處理與校驗

*/

public string checkexpression(string str)

{

stack s_check = new stack();

stack s_tmp = new stack();

string str_result = “”;

string str_regex = “^[\\.\\d\\+\\-\\*/\\(\\)]+$“;????????????????? //匹配合法的運算字符”數字,.,+,-,*,/,(,),”

pattern p_filtrate = pattern.compile(str_regex);

matcher m = p_filtrate.matcher(str);

boolean b_filtrate = m.matches();

if (!b_filtrate)

{

str_result = “”;

return str_result;

}

string str_err_float = “.*(\\.\\d*){2,}.*”;????????????????????? //匹配非法的浮點數.

pattern p_err_float = pattern.compile(str_err_float);

matcher m_err_float = p_err_float.matcher(str);

boolean b_err_float = m_err_float.matches();

if (b_err_float)

{

str_result = “”;

return str_result;

}

for (int i=0;i

{

char ch = str.charat(i);

if (checkfig(ch))

{

if (!s_tmp.isempty()&&s_tmp.peek()==))

{

str_result = “”;

return str_result;

}

s_tmp.push(ch);

str_result = str_result+ch;

}

switch(ch)

{

case (:

if (!s_tmp.isempty()&&s_tmp.peek()==.)

{

str_result = “”;

return str_result;

}

s_check.push(ch);

if (s_tmp.isempty()||(!this.checkfig(s_tmp.peek())&&s_tmp.peek()!=)))

{

str_result = str_result+ch;

} else {

str_result = str_result+”*”+ch;

}

s_tmp.push(ch);

break;

case ):

if (!s_check.isempty())

{

char chx = s_check.pop();

if (ch==) && chx!=()

{

str_result = “”;

return str_result;

}

} else {

str_result = “”;

return str_result;

}

if (s_tmp.peek()==.||(!this.checkfig(s_tmp.peek())&&s_tmp.peek()!=)))

{

str_result = “”;

return str_result;

}

s_tmp.push(ch);

str_result = str_result+ch;

break;

case +:

case -:

if (!s_tmp.isempty()&&(s_tmp.peek()==+||s_tmp.peek()==-||s_tmp.peek()==*||s_tmp.peek()==/||s_tmp.peek()==.))

{

str_result = “”;

return str_result;

}

if (s_tmp.isempty()||s_tmp.peek()==()

{

str_result = str_result+”0″+ch;

} else {

str_result = str_result+ch;

}

s_tmp.push(ch);

break;

case *:

case /:

if (s_tmp.isempty()||s_tmp.peek()==.||(!this.checkfig(s_tmp.peek())&&s_tmp.peek()!=)))

{

str_result = “”;

return str_result;

}

s_tmp.push(ch);

str_result = str_result+ch;

break;

case .:

if (s_tmp.isempty()||!this.checkfig(s_tmp.peek()))

{

str_result = str_result+”0″+ch;

} else {

str_result = str_result+ch;

}

s_tmp.push(ch);

break;

default:

break;

}

}

if (!s_check.isempty())

{

str_result = “”;

return str_result;

}

return str_result;

}

private static boolean checkfig(object ch)

{

string s = ch.tostring();

string str_regexfig = “\\d“;????????????????? //匹配數字

pattern p_fig = pattern.compile(str_regexfig);

matcher m_fig = p_fig.matcher(s) ;

boolean b_fig = m_fig.matches();

return b_fig;

}

};

總結

以上是生活随笔為你收集整理的用java写四则混合运算,JAVA写的四则混合运算-JSP教程,Java技巧及代码的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。