導航:首頁 > 編程語言 > java加減運算

java加減運算

發布時間:2021-12-09 09:18:37

1. 加減乘除運算(java)

實際上這相當於javascript的eval方法,以下是該方法的java實現:

//Eval.java
import java.util.ArrayList;
import java.util.List;
import java.util.Stack;

public class Eval {
public int eval(String exp){
List<String> list = infixExpToPostExp(exp);//轉化成後綴表達式
return doEval(list);//真正求值
}

//遇到操作符壓棧,遇到表達式從後綴表達式中彈出兩個數,計算出結果,壓入堆棧
private int doEval(List<String> list) {
Stack<String> stack = new Stack<String>();
String element;
int n1,n2,result;
try{
for(int i = 0; i < list.size();i++){
element = list.get(i);
if(isOperator(element)){
n1 = Integer.parseInt(stack.pop());
n2 = Integer.parseInt(stack.pop());
result = doOperate(n1,n2,element);
stack.push(new Integer(result).toString());
}else{
stack.push(element);
}
}
return Integer.parseInt(stack.pop());
}catch(RuntimeException e){
throw new IllegalExpressionException(e.getMessage());
}
}

private int doOperate(int n1, int n2, String operator) {
if(operator.equals("+"))
return n1 + n2;
else if(operator.equals("-"))
return n1 - n2;
else if(operator.equals("*"))
return n1 * n2;
else
return n1 / n2;
}

private boolean isOperator(String str){
return str.equals("+") || str.equals("-") || str.equals("*") || str.equals("/");
}

private List<String> infixExpToPostExp(String exp){//將中綴表達式轉化成為後綴表達式
List<String> postExp = new ArrayList<String>();//存放轉化的後綴表達式的鏈表
StringBuffer numBuffer = new StringBuffer();//用來保存一個數的
Stack<Character> opStack = new Stack<Character>();//操作符棧
char ch,preChar;
opStack.push('#');
try{
for(int i = 0; i < exp.length();){
ch = exp.charAt(i);
switch(ch){
case '+':
case '-':
case '*':
case '/':
preChar = opStack.peek();
// 如果棧裡面的操作符優先順序比當前的大,則把棧中優先順序大的都添加到後綴表達式列表中
while(priority(preChar) >= priority(ch)){
postExp.add(""+preChar);
opStack.pop();
preChar = opStack.peek();
}
opStack.push(ch);
i++;
break;
case '(':
// 左括弧直接壓棧
opStack.push(ch);
i++;
break;
case ')':
// 右括弧則直接把棧中左括弧前面的彈出,並加入後綴表達式鏈表中
char c = opStack.pop();
while(c != '('){
postExp.add("" + c);
c = opStack.pop();
}
i++;
break;
// #號,代表表達式結束,可以直接把操作符棧中剩餘的操作符全部彈出,並加入後綴表達式鏈表中
case '#':
char c1;
while(!opStack.isEmpty()){
c1 = opStack.pop();
if(c1 != '#')
postExp.add("" + c1);
}
i++;
break;
//過濾空白符
case ' ':
case '\t':
i++;
break;
// 數字則湊成一個整數,加入後綴表達式鏈表中
default:
if(Character.isDigit(ch)){
while(Character.isDigit(ch)){
numBuffer.append(ch);
ch = exp.charAt(++i);
}
postExp.add(numBuffer.toString());
numBuffer = new StringBuffer();
}else{
throw new IllegalExpressionException("illegal operator");
}
}
}
}catch(RuntimeException e){
throw new IllegalExpressionException(e.getMessage());
}
return postExp;
}

private int priority(char op){//定義優先順序
switch(op){
case'+':
case'-':
return 1;
case'*':
case'/':
return 2;
case'(':
case'#':
return 0;
}
throw new IllegalExpressionException("Illegal operator");
}

}

Main.java 主函數所在類
public class Main
{
public static void main(String[] args) {

try {
InputStreamReader isr=new InputStreamReader(System.in);
BufferedReader br=new BufferedReader(isr);
String exp=br.readLine();

int result = eval.eval(exp);
System.out.println(result);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
}

IllegalExpressionException異常類
public class IllegalExpressionException extends RuntimeException{

public IllegalExpressionException(){

}

public IllegalExpressionException(String info){
super(info);
}
}

2. JAVA中實現計算加法的功能

你需要看一下swing事件的編寫,你需要調用文本框的getText方法得到裡面的數值,然後為「=」按鈕寫監聽事件,調用第三個文本框的setText方法顯示結果。我這里有個跟你界面相同的完善版,包括加減乘除運算的,我在代碼中用加粗著重突出了事件的那部分。import javax.swing.*;
import java.awt.*;
import java.awt.event.*;public class AA extends JFrame
{
protected JTextField tFirst,tSecond,tResult,tEqual;
private JComboBox cFu;
private JButton jOk;
private String sFuHao;
protected String sFirst;

float fFirst,fSecond,fResult;

private String cFuHao[] = {
"+","-","*","/"
};

public AA()
{
super( "Calculator" );

Container container = getContentPane();
container.setLayout( new FlowLayout() );
tFirst = new JTextField( 10 );
container.add( tFirst );
cFu = new JComboBox( cFuHao );
cFu.setMaximumRowCount( 3 );
container.add( cFu );
tSecond = new JTextField( 10 );
container.add( tSecond );

tEqual = new JTextField( "=", 1 );
tEqual.setEditable( false );
container.add( tEqual );

tResult = new JTextField( 10 );
tResult.setEditable( false );
container.add( tResult );

jOk = new JButton( "calculate" );
container.add( jOk );

ButtonHandler handler = new ButtonHandler();
jOk.addActionListener( handler );
setSize( 600,80 );
setVisible( true );

}

public static void main( String args[] )
{
AA application = new AA();
application.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
}

private class ButtonHandler implements ActionListener{

public void actionPerformed( ActionEvent event )
{
sFuHao=(String)cFu.getSelectedItem();
if((tFirst.getText()).equals("#")||(tSecond.getText()).equals("#"))
System.exit(0);

fFirst = Float.parseFloat(tFirst.getText());
fSecond = Float.parseFloat(tSecond.getText());

if(sFuHao.equals("+"))
fResult = fFirst + fSecond;
else if(sFuHao.equals("-"))
fResult = fFirst - fSecond;
else if(sFuHao.equals("*"))
fResult = fFirst * fSecond;
else
fResult = fFirst / fSecond;

tResult.setText( String.valueOf(fResult) );
}
}
}

3. 如何使用java實現加減乘除運算

java有內置的運算符
+ - * /
int a=1,b=2;
a+b;
a-b;
a*b;
a/b;

4. java int double 加減法 基本類型運算問題

1.-2.8421709430404007E-14表示-2.8421709430404007乘以10的-14次方,計算機能准確表示十進制的整數,但不能准確表示十進制小數。System.out.println(150.0+0+183.28-0-183.28-150.0);150.0+0+183.28-0-183.28-150.0的結果為0.00000000000...,只不過你的輸出結果為double型,精度比較高,沒有超出列印函數(println之類的)的默認精度而已。

2.System.out.println(((150.00)+0.00+(183.28))-(0.00+(183.28)+(150.00)));中將((150.00)+0.00+(183.28))作為個運算單元,二個括弧內的運算的結果肯定一樣,與精度無關。結果當然為0。

3.用System.out.println((long)(150.0+0+183.28-0-183.28-150.0));(150.0+0+183.28-0-183.28-150.0)的結果為0.00000000...,轉換成long,舍棄小數位,結果自然為0;

4.System.out.println(150.0F+0+183.28F-0-183.28F-150.0F); 運算結果為float型,超出列印函數(println之類的)的默認精度,截取下來為0。

不知道解釋的你滿意不?

5. 【高分懸賞】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);
}
}

運行結果:

6. 用JAVA接受用戶輸入兩個數字,進行加減運算

那要看你是用什麼IDE來編程的啦,運行java程序要必須首先安裝JDK。
1.如果你是用記事本編輯的話。「運行」--「notepad」
輸入:
public class Add
{
public static void main(String args[])
{
int a;
int b;
int result;
a=Integer.parseInt(args[0]);
b=Integer.parseInt(args[1]);
result=a+b;
System.out.println(result);
}
}
保存為「Add.java」
「運行」-「CMD」-進入剛才保存的目錄
使用「javac(空格)Add.java」編譯成class文件
使用「java(空格)Add(空格)2(空格)1」運行
結果:3
還記得public static void main(String[] args)嗎?這里的args就是你的啟動參數。

在運行時你輸入java package1.class1 -arg1 -arg2,args中就會有兩個String,一個是arg1,另一個是arg2。
2.如果你是用eclipse3.1.2的話。麻煩點,因為它自帶控制台。所以代碼在運行時要進行設置:
同樣是上面的代碼
在eclipse3.1.2中,右擊類名「Add.java」在彈出菜單中選擇「run as」--「run……」--彈出對話框--在「java application」中,你會看到剛創建的「Add.java」如果沒有在左下方,點擊「new」--在右面的「(x)=arguments」選項卡中的「program arguments」中輸入「1(空格)2」--「apply」--「run」
在下面的「console」即可看到「3」

7. java的加減乘除運算

使用BigDecimal並且一定要用String來夠造。
實現方法如下:

import java.math.BigDecimal;

/**

* 由於Java的簡單類型不能夠精確的對浮點數進行運算,這個工具類提供精

* 確的浮點數運算,包括加減乘除和四捨五入。

*/

public class Arith{

//默認除法運算精度

private static final int DEF_DIV_SCALE = 10;

//這個類不能實例化

private Arith(){

}

/**

* 提供精確的加法運算。

* @param v1 被加數

* @param v2 加數

* @return 兩個參數的和

*/

public static double add(double v1,double v2){

BigDecimal b1 = new BigDecimal(Double.toString(v1));

BigDecimal b2 = new BigDecimal(Double.toString(v2));

return b1.add(b2).doubleValue();

}

/**

* 提供精確的減法運算。

* @param v1 被減數

* @param v2 減數

* @return 兩個參數的差

*/

public static double sub(double v1,double v2){

BigDecimal b1 = new BigDecimal(Double.toString(v1));

BigDecimal b2 = new BigDecimal(Double.toString(v2));

return b1.subtract(b2).doubleValue();

}

/**

* 提供精確的乘法運算。

* @param v1 被乘數

* @param v2 乘數

* @return 兩個參數的積

*/

public static double mul(double v1,double v2){

BigDecimal b1 = new BigDecimal(Double.toString(v1));

BigDecimal b2 = new BigDecimal(Double.toString(v2));

return b1.multiply(b2).doubleValue();

}

/**

* 提供(相對)精確的除法運算,當發生除不盡的情況時,精確到

* 小數點以後10位,以後的數字四捨五入。

* @param v1 被除數

* @param v2 除數

* @return 兩個參數的商

*/

public static double div(double v1,double v2){

return div(v1,v2,DEF_DIV_SCALE);

}

/**

* 提供(相對)精確的除法運算。當發生除不盡的情況時,由scale參數指

* 定精度,以後的數字四捨五入。

* @param v1 被除數

* @param v2 除數

* @param scale 表示表示需要精確到小數點以後幾位。

* @return 兩個參數的商

*/

public static double div(double v1,double v2,int scale){

if(scale<0){

throw new IllegalArgumentException(

"The scale must be a positive integer or zero");

}

BigDecimal b1 = new BigDecimal(Double.toString(v1));

BigDecimal b2 = new BigDecimal(Double.toString(v2));

return b1.divide(b2,scale,BigDecimal.ROUND_HALF_UP).doubleValue();

}

/**

* 提供精確的小數位四捨五入處理。

* @param v 需要四捨五入的數字

* @param scale 小數點後保留幾位

* @return 四捨五入後的結果

*/

public static double round(double v,int scale){

if(scale<0){

throw new IllegalArgumentException(

"The scale must be a positive integer or zero");

}

BigDecimal b = new BigDecimal(Double.toString(v));

BigDecimal one = new BigDecimal("1");

return b.divide(one,scale,BigDecimal.ROUND_HALF_UP).doubleValue();

}

};

8. java初學減法運算

在大多數情況下,使用double和float計算的結果是准確的,但是在一些精度要求很高的系統中,這種問題是非常嚴重的。


在《EffectiveJava》中提到一個原則,那就是float和double只能用來作科學計算或者是工程計算,但在商業計算中我們要用java.math.BigDecimal,通過使用BigDecimal類我們可以解決上述問題,實例代碼如下:

packageex;

importjava.math.*;

publicclassBigDecimalDemo{
publicstaticvoidmain(String[]args){
System.out.println(ArithUtil.add(0.01,0.05));
System.out.println(ArithUtil.sub(1.0,0.42));
System.out.println(ArithUtil.mul(4.015,100));
System.out.println(ArithUtil.div(123.3,100));
}
}

classArithUtil{
privatestaticfinalintDEF_DIV_SCALE=10;

privateArithUtil(){}

publicstaticdoubleadd(doubled1,doubled2){
BigDecimalb1=newBigDecimal(Double.toString(d1));
BigDecimalb2=newBigDecimal(Double.toString(d2));
returnb1.add(b2).doubleValue();

}

publicstaticdoublesub(doubled1,doubled2){
BigDecimalb1=newBigDecimal(Double.toString(d1));
BigDecimalb2=newBigDecimal(Double.toString(d2));
returnb1.subtract(b2).doubleValue();

}

publicstaticdoublemul(doubled1,doubled2){
BigDecimalb1=newBigDecimal(Double.toString(d1));
BigDecimalb2=newBigDecimal(Double.toString(d2));
returnb1.multiply(b2).doubleValue();

}

publicstaticdoublediv(doubled1,doubled2){

returndiv(d1,d2,DEF_DIV_SCALE);

}

publicstaticdoublediv(doubled1,doubled2,intscale){
if(scale<0){
("");
}
BigDecimalb1=newBigDecimal(Double.toString(d1));
BigDecimalb2=newBigDecimal(Double.toString(d2));
returnb1.divide(b2,scale,BigDecimal.ROUND_HALF_UP).doubleValue();

}

}

9. java中如何實現字元與數字加減運算

int f = 'a' + 4;
System.out.println(f);
結果是:來101
System.out.println((char)f);
結果是:e
java中也是源可以字元+數值的,java也是會自動類型轉換的(由低到高,成為隱式轉換),相加過程中會將char型先轉int型然後相加。 如果由高到低類型的轉換就得強轉(稱為顯式轉換),如:(char)101

10. java 編寫一個可對復數進行加減運算的程序

1、real和image這兩復個field前面的static去掉。制

2、public Complex() 這個構造器去掉,如果要接受輸入的話,應該放到main方法里,這樣這個類更清晰。

3、靜態方法Complex_add和Complex_minus沒指定返回值類型,應該返回的是Complex。另外方法名字首字母應小寫。

4、參考這個:http://..com/question/151336863.html

閱讀全文

與java加減運算相關的資料

熱點內容
葉子楣和午馬一起演的電影叫什麼 瀏覽:483
買電視機去哪個網站 瀏覽:318
移動盒子大片限時免費 瀏覽:776
許志安和羅美薇合作的電影名字 瀏覽:88
歐美四級有推薦的嗎? 瀏覽:79
數控斜車和平車編程有什麼區別 瀏覽:655
蘋果6下載軟體要登陸不了ID 瀏覽:317
三星9280安卓70刷機包 瀏覽:20
iphone5c704越獄 瀏覽:60
黃岡運營商三網大數據怎麼樣 瀏覽:225
ug編程幾何體被定義什麼意思 瀏覽:465
c頭文件功能 瀏覽:255
A1創世者電影中文版 瀏覽:794
大數據發展的趨勢分析 瀏覽:405
思晨電影叫什麼 瀏覽:85
徐錦江,葉子楣 瀏覽:781
盜賊制毒升級 瀏覽:177
女鼎爐采補至死小說 瀏覽:775
手機設置華碩路由器怎麼設置密碼 瀏覽:382
母乳人妻倫理 瀏覽:82

友情鏈接