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;
}
}
简单的计算器 java版
最新推荐文章于 2022-09-05 10:47:58 发布