⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 biaoda.java

📁 课程设计
💻 JAVA
字号:


//算符优先发表达式求值

import java.util.*;
import java.io.*;


class biaodashi
{
	String expression;
	Stack stack_num;//数字栈
	Stack stack_sig;//字符栈
	char sig[]={'+','-','*','/','(',')','='};//元算符
	
    char rel[][]={ {'>','>','<','<','<','>','>'},//运算符的优先关系
                   {'>','>','<','<','<','>','>'},
                   {'>','>','>','>','<','>','>'},
                   {'>','>','>','>','<','>','>'},
                   {'<','<','<','<','<','=',' '},
                   {'>','>','>','>',' ','>','>'},
                   {'<','<','<','<','<',' ','='} };

    char Precede(char c,char d)//判断运算符c和d的优先关系
	{
		int i,j;
		for(i=0;c!=sig[i];i++);
		for(j=0;d!=sig[j];j++);
		return (rel[i][j]);	
	}
    
	double Operate(double x,char c,double y)//计算表达式xcy的结果
	{
		double result = 0;
		switch(c)
		{
		case'+':result=x+y;break;
		case'-':result=x-y;break;
		case'*':result=x*y;break;
		case'/':result=x/y;break;
		}	
		return result;
	}




	public biaodashi()
	{
		String expression="";    //得到字符串
		try {
		       expression = (new BufferedReader(new InputStreamReader(System.in))).readLine();
		     } 
		catch (IOException e) 
		 {
		       e.printStackTrace();
		 }
		
		this.expression = expression;
		StringTokenizer str = new StringTokenizer(expression,"+-*/()=",true);// 将表达式分割成数学式子

		stack_num = new Stack();//栈的构造
		stack_sig = new Stack();
		stack_sig.push("=");

		String text;
		text = str.nextToken();


		
		while(!text.equals("=")||!((String)(stack_sig.peek())).equals("="))
		{
			if(Character.isDigit(text.charAt(0)))//当前元素为数字
			{
				stack_num.push(text);//!!!注意:数字在栈中以字符串的形式保存,计算时需转换
				text = str.nextToken();
			}
			else
			{
				switch(Precede(((String)stack_sig.peek()).charAt(0),text.charAt(0)))//判断当前字符和字符栈顶字符的优先关系
				{
				case'<':stack_sig.push(text);text = str.nextToken();break;
				case'=':stack_sig.pop();text = str.nextToken();break;
				case'>':char theta = ((String)(stack_sig.pop())).charAt(0);//从符号栈中弹出一个符号
				double x = Double.parseDouble((String)stack_num.pop());//从数字栈中弹出两个操作数  
				double y = Double.parseDouble((String)stack_num.pop());				
				stack_num.push(String.valueOf(Operate(y,theta,x)));//将计算所的数字转换为字符串的形式压入栈
				
				break;
				}
			}
		}
		System.out.print(stack_num.peek());
	}

}




public class Biaoda
{
	public static void main(String [] args)
	{
		System.out.println("Please input your CULETER!");
		biaodashi a = new biaodashi();
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -