❶ 加減乘除運算(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);
}
}
❷ 怎麼在JAVA中運算表達式
Java表達式是變數、常量、運算符、方法調用的序列,它執行指定的計算並返回某個確定的值。
其中,運算符按操作數的數目:有一元運算符(++、--)、二元運算符(+、-、>等等)和三元運算符(?:),它們分別對應一到三個操作數。
表達式一般按運算符來分:
算術表達式(float x=8.3f、i++)、
關系表達式(3>7、3<7)、
布爾邏輯表達式((5>4)&&true、!false)、
位運算表達式(a=34^3)、
賦值表達式、
條件表達式(b=100>89?a=ture:a=false)
以及復合表達式。
還有一種叫「表達式語句」,就是在表達式後加上分號作為語句來使用。(int i=123;)
❸ 「100」+90,java中怎麼計算的
"「100」+90,java中計算方法"是兩個變數相加賦給第三個變數。操作方法如下:
1、新建一個java類,定義加法的方法;
2、定義方式為聲明兩個變數,然後相加,賦給第三個變數;
3、使用return返回出來;
4、運行編寫的java程序,兩個變數是100、90,賦給第三個變數就得到結果190。
❹ java運算符的計算方法
位運算符用於對整型數據進行按位操作,&「與」例如1&0=0,|「或」如:1|0=1
a=4|3=100(2)|11(2)=111(2)=7(10);
b=4&3=100(2)&011(2)=000(2)=0(10);
❺ JAVA怎麼進行關系運算
關系運算包括:
==
檢查如果兩個操作數的值是否相等,如果相等則條件為真。
(A == B)為假。
!=
檢查如果兩個操作數的值是否相等,如果值不相等則條件為真。
(A != B) 為真。
>
檢查左操作數的值是否大於右操作數的值,如果是那麼條件為真。
(A> B)為假。
<
檢查左操作數的值是否小於右操作數的值,如果是那麼條件為真。
(A <B)為真。
>=
檢查左操作數的值是否大於或等於右操作數的值,如果是那麼條件為真。
(A> = B)為假。
<=
檢查左操作數的值是否小於或等於右操作數的值,如果是那麼條件為真。
(A <= B)為真。
詳細詳細和代碼可以查看Java 運算符
❻ JAVA的加,減,乘,除運算方法
首先可以把計算器看成是一個對象就是一個類,它有加、減、乘、除功能,這四個就是這個類的方法;你可以給這個類定義兩個成員變數
int
x、int
y
然後分別用這四個方法對x
、y
實行加、減、乘、除並返回其值
代碼大概如下:
class
counter{
private
int
x;
private
int
y;
public
counter(){
}
public
counter(int
x,int
y){
this.x=x;
this.y=y;
}
public
double
adding(){
//加運算
return
x+y;
}
public
double
minus(){
//減運算
return
x-y;
}
public
double
times(){
//乘運算
return
x*y;
}
public
double
divide(){
//除運算
return
x/y;
}
}
//測試類
public
class
test{
public
static
void
main(string[]
args){
counter
c=new
counter(5,4);//實例化
system.out.println(c.adding());//輸出加的結果
system.out.println(c.minus());//輸出減的結果
system.out.println(c.times());//輸出乘的結果
system.out.println(c.divide());//輸出除的結果
}
}
希望對你有幫助
❼ 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();
}
};
❽ JAVA語言運算符的方法詳解
jar文件聽說過嗎,沒有?或者陌生!好,沒關系,這就是我們的第一站:打包發布。
為什麼會有這個玩意呢,首先,這是jar的全稱:JavaTM Archive (JAR) file,是的,就是java存檔文件。這有點類似zip文件,想一想它是干什麼的用的呢,壓縮!?沒錯就是要壓縮,將我們原先零散的東西放到一下,重新組織,所有這些目的只有一個:方便!好了,不用管他是怎麼壓縮的,我們的重點是哪些是我們要壓縮的(輸入),還有壓縮成了什麼(輸出),進而將它發布(部署)。
那我們的輸入(要壓縮的東西)主要是class文件,還有輔助的資源(這其中可能有圖片,jsp文件,html文件等等)。Jar技術在jdk1.1版本中就已存在,在1.2中又有了增強。接下來說說jar的好處吧,這是官方的描述:安全,快速下載,壓縮,獵取包,版本化包,可攜。
說了這么多,我們開始實施。
先打開命令提示符(win2000或在運行筐里執行cmd命令,win98為DOS提示符),輸入jar Chelp,然後回車(如果你盤上已經有了jdk1.1或以上版本),看到什麼:
用
❾ Java如何用最有效的方法計算22*8
Java乘法運算還有位運算符也可以完成乘法運算
<<左移運算符 ,左移一位,相當於乘2
>>右移運算符 ,右移一位,相當於除2
22 乘 8=11 乘 16, 16是2的4次方,就是通過位運算符,11向左移4位
22 乘 8最有效的計算方法為: 11左移4位 及11<<4
你明白了嗎?