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

📄 ca2.java

📁 实现计算机上面的计算器功能 并且满足小数点一及各个符号的功能
💻 JAVA
字号:
import java.awt.*;
import java.awt.event.*;

public class Ca2 implements ActionListener{
	Frame f;
	TextField tf ;
	int op1,op2,result;
	char opr,op;
	String oprset = "+-*/()=";
	Stack1 stack1;
	Stack2 stack2;

	boolean end = false;	
	public Ca2(){
		f = new Frame("my caculater");
		tf = new TextField(10);
		stack1 = new Stack1(100);
		stack2 = new Stack2(100);
		stack2.push('=');
		this.creatUI();	
	}
	
	public void creatUI(){
		Panel p = new Panel();	
		p.setLayout(new java.awt.GridLayout(5,4));
		Button[] b = new Button[20];
		String[] label = {"7","8","9","/",
						  "4","5","6","*",
						  "1","2","3","+",
						  "0",".","=","-",
						  "(",")","开","关"
						 };
		for(int i=0;i<b.length;i++){
			b[i] = new Button(label[i]);
			b[i].setBackground(new Color(180,200,200));	
			b[i].setFont(new Font("宋体",Font.BOLD,20));
			p.add(b[i]);
			b[i].addActionListener(this);
		}
		
		f.add(tf,"North");
		f.add(p);
		f.setSize(300,250);
		f.addWindowListener(new WindowAdapter(){
			public void windowClosing(WindowEvent e){
				System.exit(1);
			}
		});
		f.setVisible(true);						 
	}
	
	public void actionPerformed(ActionEvent e){
		
		String s = e.getActionCommand();
		char c = s.charAt(0);
		if(c>='0' && c<='9'){
			if(!end){
				tf.setText(tf.getText() + c);
			}
			else{
				tf.setText(c + "");
				end = false;
			}		
		}else if(this.isOpr(c)){
			if(end == false){
				end = true;
				op1 = Integer.parseInt(tf.getText());
				stack1.push(op1);
			}
			op = stack2.getTop();

			while(this.m1(op,c) == '>'){
				op2 = stack1.pop();
				op1 = stack1.pop();
				op = stack2.pop();
				switch(op){
					case '+':
						result = op1 + op2;
						break;					
					case '-':
						result = op1 - op2;
						break;					
					case '*':
						result = op1 * op2;
						break;					
					case '/':
						result = op1 / op2;
						break;	
				}
				stack1.push(result);
				op = stack2.getTop();						
			}

			tf.setText(Integer.toString(stack1.getTop()));

			
			if(this.m1(op,c) == '<'){
				stack2.push(c);
			}else if(this.m1(op,c) == '='){
				if(c == ')'){
					stack2.pop();	
				}
				if(c == '='){
					result = stack1.pop();
					tf.setText(Integer.toString(result));
				}
			}
		}
	}
	 	
	public static void main(String[] args){
		Ca2 ca = new Ca2();
	}
	
	public boolean isOpr(char c){
		return oprset.indexOf(c)>=0;
	}
	
	public char m1(char c1,char c2){
		char[][] set = {{'>','>','<','<','<','>','>'},
						{'>','>','<','<','<','>','>'},
						{'>','>','>','>','<','>','>'},
						{'>','>','>','>','<','>','>'},
						{'<','<','<','<','<','=','E'},
						{'>','>','>','>','E','>','>'},
						{'<','<','<','<','<','E','='}};	
						
		return set[oprset.indexOf(c1)][oprset.indexOf(c2)];						
	}
}


class Stack1{
	//属性声明部分
	private int top;
	private int[] array;
	private int size;
	//构造方法
	public Stack1(int size) {//创建并初始化一个堆栈对象
		this.size = size;
		array = new int[size];
		top = -1;
	}

	//压栈:若栈不满,则将data插入为栈顶元素,返回值为true;否则返回false。
	public boolean push(int data) {
		if(top < size-1){
			array[++top] = data;
			return true;
		}
		return false;
	}
	
	//弹栈
	public int pop() {
		if(top >= 0){
			return array[top--];
		}
		return 0;		
	}
	
	//取栈顶元素(不进行弹栈操作)
	public int getTop() {
		if(top >= 0){
			return array[top];
		}
		return 0;		
		
	}
	
	//判断栈是否空
	public boolean isEmpty() {
		return top<0;
	}
	
	//栈置空操作
	public void clear() {
		top = -1;
	}
	
	//获取当前栈中元素个数
	public int currentSize() {
		return top+1;
	}
}


class Stack2{
	//属性声明部分
	private int top;
	private char[] array;
	private int size;
	//构造方法
	public Stack2(int size) {//创建并初始化一个堆栈对象
		this.size = size;
		array = new char[size];
		top = -1;
	}

	//压栈:若栈不满,则将data插入为栈顶元素,返回值为true;否则返回false。
	public boolean push(char data) {
		if(top < size-1){
			array[++top] = data;
			return true;
		}
		return false;
	}
	
	//弹栈
	public char pop() {
		if(top >= 0){
			return array[top--];
		}
		return 0;		
	}
	
	//取栈顶元素(不进行弹栈操作)
	public char getTop() {
		if(top >= 0){
			return array[top];
		}
		return 0;		
		
	}
	
	//判断栈是否空
	public boolean isEmpty() {
		return top<0;
	}
	
	//栈置空操作
	public void clear() {
		top = -1;
	}
	
	//获取当前栈中元素个数
	public int currentSize() {
		return top+1;
	}
}

⌨️ 快捷键说明

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