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

📄 calculator.java

📁 实现4个数的24点计算 也可输入4个1-9的数字
💻 JAVA
字号:


public class Calculator
{
	private DoubleStack s=new DoubleStack();
	protected String exp;
	public Calculator(){}
	public boolean getexp(String exp)
	{
		if(exp.length()==0)
			return false;
		
		else 
		{
			this.exp=exp;
			return true;
		}
		
	}
	
	public int isp(char a)
	{
		int r=0;
		if(a=='#')r=0;
		if(a=='(')r=1;
		if(a=='^')r=7;
		if(a=='*'||a=='/'||a=='%')r=5;
		if(a=='+'||a=='-')r=3;
		if(a==')')r=8;
		return r;
	}
	public int icp(char a){
		int r=0;
		if(a=='#')r=0;
		if(a=='(')r=8;
		if(a=='^')r=6;
		if(a=='*'||a=='/'||a=='%')r=4;
		if(a=='+'||a=='-')r=2;
		if(a==')')r=1;
		return r;
	}
	
	
	//将操作数的值进栈
	public void AddOperand(double value)
	{
		s.Push(value);
	}
	
	//从栈中取两个操作数
	public double GetROperands()
	{
		if(s.IsEmpty())									//检查栈是否为空
		{
			System.out.println("it missing operand!");	//栈空,操作数不存在
			return -1;
		}
		return s.Pop();									//取右操作数
		 
	}
	public double GetLOperands()
	{
		if(s.IsEmpty()){
			System.out.println("missing operand!");		//检查栈是否为空
			return -1;
		}
														//取左操作数
		return s.Pop();
	}
	
	
	public void Clear(){
		s.MakeEmpty();
	}
	
	
	
	public void DoOperator(char op){
		double left=0.0,right=0.0;
		right=GetROperands();
		left=GetLOperands();
		if(true)
			switch(op) 
			{
			case '+':s.Push(left+right);break;
			case '-':s.Push(left-right);break;
			case '*':s.Push(left*right);break;
			case '/':if(right==0.0)
			{
				System.out.println("divide by 0!");
				Clear();
			}
			else s.Push(left/right);break;
			 
			}
		else Clear();
	}
		
	public double Run(){
		CharStack ss=new CharStack();
		CharStack s1=new CharStack();
		CharStack s2=new CharStack();
		char ch,y;
		ss.MakeEmpty();
		s1.MakeEmpty();
		s2.MakeEmpty();
		ss.Push('#');
		s1.Push('#');
		int i=0;
		
		do{
			ch=exp.charAt(i);
			if(ch=='J'||ch=='Q'||ch=='K'){
				s1.Push(ch);
			}
			if(ch>='0'&&ch<='9')s1.Push(ch);
			else if(ch==')')
				for(y=ss.Pop();y!='(';y=ss.Pop())
					s1.Push(y);
			else 
			{
				for (y=ss.Pop();isp(y)>icp(ch);y=ss.Pop()){
					s1.Push(y);
				}
				ss.Push(y);ss.Push(ch);
				
					
			}
			i++;
		}while (i<exp.length());
		
		
		
		while(!ss.IsEmpty()){
			y=ss.Pop();s1.Push(y);
		}
		
		s1.Pop();
		
		s1.Push('=');
		do {
			y=s1.Pop();
			s2.Push(y);
		}while(y!='#');
		y=s2.Pop();
		ch=s2.Pop();

		while (ch!='='){
			switch(ch)
			{
			case'+':case'-':case'*':case'/':case'^':
				DoOperator(ch);break;
			default:
				
				AddOperand(ch-'0');
				break;
			}
			ch=s2.Pop();
		}
	    return s.Pop();
	}
	public static void main(String[] args)
	{
		Calculator c=new Calculator();
		c.Run();
	}
}

⌨️ 快捷键说明

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