简单的计算器 java版

package jisu1.com;


import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;


import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class GUI extends JFrame implements ActionListener{
JButton[] btns = {new JButton("0"),new JButton("1"),
new JButton("2"),new JButton("3"),new JButton("4"),new JButton("5"),
new JButton("6"),new JButton("7"),new JButton("8"),new JButton("9"),
new JButton("+"),new JButton("=")};
JTextField tf = new JTextField(10);
JPanel p1 = new JPanel();
JPanel p2 = new JPanel();
Symbol sy = new Symbol();
public GUI(){
super("计算器");
tf.setText("");
tf.setHorizontalAlignment(JTextField.RIGHT);
p1.setLayout(new BorderLayout());
p1.add(tf, BorderLayout.NORTH);
p2.setLayout(new GridLayout(3,4));
for(int i = 0; i<12;i++){
btns[i].addActionListener(this);
p2.add(btns[i]);
}
p1.add(p2,BorderLayout.CENTER);
this.add(p1);
this.setBounds(new Rectangle(200,200));
this.setVisible(true);
this.setDefaultCloseOperation(getDefaultCloseOperation());
}

public static void main(String[] args){
new GUI();
}


@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(sy.clean == true){
tf.setText("");
sy.clean = false;
}
if(e.getSource().equals(btns[0])){
tf.setText(tf.getText() + '0');
}
if(e.getSource().equals(btns[1])){
tf.setText(tf.getText() + '1');
}
if(e.getSource().equals(btns[2])){
tf.setText(tf.getText() + '2');
}
if(e.getSource().equals(btns[3])){
tf.setText(tf.getText() + '3');
}
if(e.getSource().equals(btns[4])){
tf.setText(tf.getText() + '4');
}

if(e.getSource().equals(btns[5])){
tf.setText(tf.getText() + '5');
}
if(e.getSource().equals(btns[6])){
tf.setText(tf.getText() + '6');
}
if(e.getSource().equals(btns[7])){
tf.setText(tf.getText() + '7');
}
if(e.getSource().equals(btns[8])){
tf.setText(tf.getText() + '8');
}
if(e.getSource().equals(btns[9])){
tf.setText(tf.getText() + '9');
}

if(e.getSource().equals(btns[10])){
sy.inputnum(Integer.parseInt(tf.getText()));
tf.setText("");
sy.inputch('+');
}
if(e.getSource().equals(btns[11])){
sy.inputnum(Integer.parseInt(tf.getText()));
sy.inputch('=');
tf.setText(String.valueOf(sy.getResult()));
sy.clean();
}


} 
}

package jisu1.com;


public class Symbol{

public boolean clean = false;
Number[] nums = new Number[4];
boolean status = false;
int pn = 0;
int pc = 1;
public Symbol(){ 
for(int i=0; i < nums.length; i++){
nums[i] = new Number();
}
}
public Number[] getNums(){
return nums;
}
public void inputnum(int num){
if(pn>-1 && pn <4){
if(nums[pn].getflag()== false){
nums[pn].setvalue(num);
nums[pn].setflag(true);
pn+=2;
return;
}

}else{
System.out.print("pn out of bounds\n");
clean();
return;
}
}
public void resetPn(){
if(status == true){
pn = 2;
}else{
pn=0;
}
}
public void resetPc(){
if(status == true){
pc = 3;
}else{
pc=1;
}
}

public void inputch(char ch){
if(ch != '=' && ch != '+'){
System.out.print("Founction: inputch false\n");
return;
}
int num = chToNum(ch);
if(pc>0 && pc <4){
if(nums[pc].getflag()== false){
nums[pc].setvalue(num);
nums[pc].setflag(true);
if(isPattern()){
opera();
status = true;
resetPn();
resetPc();
return;
}
pc += 2;
return;
}else{
return;
}
}else {
System.out.print("pc is out of bounds\n");
clean();
}
}

public boolean isPattern(){
if(nums[0].getflag()==true 
&& nums[1].getflag()==true
&& nums[2].getflag()==true
&& nums[3].getflag()==true){
System.out.print("Is Pattern\n");
return true;
}
if((nums[0].getflag()==true 
&& numToCh(nums[1].getnum())== '='))
{
System.out.print("Is Pattern\n");
return true;
}
return false;
}
public void opera(){
if(numToCh(nums[3].getnum())== '+'){
nums[0].setvalue(
nums[0].getnum() + 
nums[2].getnum());
nums[0].setflag(true);
nums[1].setvalue(chToNum('+'));
nums[1].setflag(true);
nums[2].setvalue(0);
nums[2].setflag(false);
nums[3].setflag(false);
return;
}

if(numToCh(nums[3].getnum())== '='){
if(numToCh(nums[1].getnum())== '+'){
nums[0].setvalue(
nums[0].getnum() + 
nums[2].getnum());
clean = true;
}
return;
}
if(numToCh(nums[1].getnum())== '='){
return;
}

if(numToCh(nums[1].getnum())== '+' 
&& numToCh(nums[3].getnum())== '='){
return;
}


}
private int chToNum(char ch){
int i = 0;
if('+'==ch){
i = -1;
return i;
}
if('=' == ch){
i = -2;
return i;
}
return i;
}

public char numToCh(int num){
char ch = ' ';
if(-1 == num){
ch = '+';
return ch;
}
if(-2 == num){
ch = '=';
return ch;
}
return ch;
}

public int getResult(){
return nums[0].getnum();
}

public void clean(){
status = false;
for(int i=0; i<4; i++){
nums[i].reset();
}
resetPn();
resetPc();
}

}


class Number {
private int value;
private boolean flag;
public Number(){
value = 0 ;
flag = false;
}
public void reset(){
value = 0 ;
flag = false;
}
public void setvalue(int num){
value = num;
}

public void setflag(boolean flag){
this.flag = flag;
}
public int getnum(){
return value;
}
public boolean getflag(){
return flag;
}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值