java

作者在 2010-12-28 21:11:51 发布以下内容
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;

class Stack_Float 
{
 float nums[];
 int top;

 Stack_Float() 
 {
  nums = new float[50];
  top = -1;
 }

 boolean IsEmpty() 
 {
  if (top == -1)
   return true;
  else
   return false;
 }

 float Pop_Stack() 
 {
  if (top == -1) 
  {
   return 0;
  }
  top--;
  return nums[top + 1];
 }

 float GetTop() 
 {
  return nums[top];
 }

 void Push_Stack(float num) 
 {
  if (top == 49)
   return;
  top++;
  nums[top] = num;
 }
}

class Stack_Char 
{
 char str[];
 int top;

 Stack_Char() 
 {
  str = new char[50];
  top = -1;
 }

 boolean CanPush(char c) 
 {
  int temp = top;
  if (c == '(') 
  {
   while (temp != -1) 
   {
    if (str[temp] == '(')
    {
     return false;
    }
    temp--;
   }
  }
  temp = top;
  if (c == '[') 
  {
   while (temp != -1) 
   {
    if (str[temp] == '[' || str[temp] == '(') 
    {
     return false;
    }
    temp--;
   }
  }
  if (c == '{') 
  {
   while (temp != -1) 
   {
    if (str[temp] == '{' || str[temp] == '[' || str[temp] == '(') 
    {
     return false;
    }
    temp--;
   }
  }
  return true;
 }

 boolean IsEmpty() 
 {
  if (top == -1)
   return true;
  else
   return false;
 }

 void Push_Stack(char ch) 
 {
  if (top == 49)
   return;
  top++;
  str[top] = ch;
 }

 char Pop_Stack() 
 {
  if (top == -1)
   return '\0';
  top--;
  return str[top + 1];
 }

 char GetTop() 
 {
  if (top == -1) 
  {
   System.out.print("error");
   System.exit(0);
  }
  return str[top];
 }
}

public class Jisuanqi extends javax.swing.JFrame implements ActionListener 
{
 JTextField text = new JTextField();
 JTextField text1 = new JTextField();
 JButton jButton1 = new JButton();
 JButton jButton2 = new JButton();
 JButton jButton3 = new JButton();
 JButton jButton4 = new JButton();
 JButton jButton5 = new JButton();
 JButton jButton6 = new JButton();
 JButton jButton7 = new JButton();
 JButton jButton8 = new JButton();
 JButton jButton9 = new JButton();
 JButton jButton10 = new JButton();
 JButton jButton11 = new JButton();
 JButton jButton12 = new JButton();
 JButton jButton13 = new JButton();
 JButton jButton14 = new JButton();
 JButton jButton15 = new JButton();
 JButton jButton16 = new JButton();
 JButton jButton17 = new JButton();
 JButton jButton18 = new JButton();
 JButton jButton19 = new JButton();
 JButton jButton20 = new JButton();
 JButton jButton21 = new JButton();
 JButton jButton22 = new JButton();
 String show = "";

 public jisuanqi() 
 {
  initComponents();
 }

 char[] TranSmit(char str[]) 
 {
  char houzhui[] = new char[50]; // 存放后缀表达式的字符串
  int i = 0, j = 0;
  char c = str[i];
  Stack_Char s = new Stack_Char(); // 存放运算符的栈
  while (c != '=') // 对算术表达式扫描未结束时
  {
   if (c >= '0' && c <= '9') 
   {
    while (c >= '0' && c <= '9')// 数字直接入栈
    {
     houzhui[j] = c;
     j++;
     i++;
     c = str[i];
    }
    houzhui[j] = '#';// 用#隔开数字
    j++;
   }
   switch (c) // 扫描到运算符时
   {
   case '+':
   case '-':
   case '*':
   case '/':
   case '(':
   case '[':
   case '{':
    if (s.IsEmpty() == true) // 栈空,直接入栈
    {
     s.Push_Stack(c);
     i++;
     c = str[i];
     break;
    }
    if (ComPare(s.GetTop(), c) == -1) {
     s.Push_Stack(c); // 入栈
     i++;
     c = str[i];
     break;
    }
    if (ComPare(s.GetTop(), c) == 1) {
     houzhui[j] = s.Pop_Stack();// 出栈元素存入后缀表达式
     j++;
     break;
    }

   case ')': // 扫描到 )
    while (s.GetTop() != '(') // 未扫描到 ( 时,出栈
    {
     houzhui[j] = s.Pop_Stack();
     j++;
    }
    s.Pop_Stack(); // '(' 出栈
    i++;
    c = str[i];
    break;
   case ']': // 扫描到 ]
    while (s.GetTop() != '[') // 未扫描到 [ 时,出栈
    {
     houzhui[j] = s.Pop_Stack();
     j++;
    }
    s.Pop_Stack(); // '[' 出栈
    i++;
    c = str[i];
    break;
   case '}': // 扫描到 }
    while (s.GetTop() != '{') // 未扫描到 { 时,出栈
    {
     houzhui[j] = s.Pop_Stack();
     j++;
    }
    s.Pop_Stack(); // '{' 出栈
    i++;
    c = str[i];
    break;
   }
  }
  while (s.IsEmpty() != true)// 把剩余的运算符直接出栈
  {
   houzhui[j] = s.Pop_Stack();
   j++;
  }
  houzhui[j] = '=';// 后缀表达式后面加 =
  j++;
  houzhui[j] = '\0';
  j++;
  return houzhui;
 }

 float Count(char str[]) 
 {
  Stack_Float s = new Stack_Float();// 定义存放数字的栈
  char c = str[0];
  int i = 0;
  float result = 0, temp, left, right;
  while (c != '=') // 未扫描到 = 时
  {
   if (c >= '0' && c <= '9')// 扫描到数字
   {
    temp = 0;
    while (c != '#')// 未读到分隔符时
    {
     temp = temp * 10 + c - '0';
     i++;
     c = str[i];
    }
    s.Push_Stack(temp);// 进栈
   }
   switch (c)// 扫描到运算符时
   {
    case '+': 
    {
     result = s.Pop_Stack() + s.Pop_Stack();// 2个数字出栈相加
     s.Push_Stack(result);// 最后得数进栈
     break;
    }
    case '-': 
    {
     right = s.Pop_Stack();// 右操作数出栈
     left = s.Pop_Stack();// 左操作数出栈
     result = left - right;
     s.Push_Stack(result);
     break;
    }
    case '*': 
    {
     result = s.Pop_Stack() * s.Pop_Stack();// 2个数字出栈相乘
     s.Push_Stack(result);
     break;
    }
    case '/': 
    {
     right = s.Pop_Stack();// 右操作数出栈
     left = s.Pop_Stack();// 左操作数出栈
     result = left / right;
     s.Push_Stack(result);
     break;
    }
   }
   i++;
   c = str[i];
  }
  return result;
 }

 int ComPare(char a, char b) // 判断运算符的优先级函数
 {
  int s[][] = {// 栈顶元素高于算术表达式中的元素时, 返回 1,否则返回 -1
    { 1, 1, -1, -1, -1, 1, -1, 1, -1, 1 },
    { 1, 1, -1, -1, -1, 1, -1, 1, -1, 1 },
    { 1, 1, 1, 1, -1, 1, -1, 1, -1, 1 },
    { 1, 1, 1, 1, -1, 1, -1, 1, -1, 1 },
    { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
    { 1, 1, 1, 1, -1, 1, -1, -1, -1, -1 },
    { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
    { 1, 1, 1, 1, -1, -1, -1, -1, -1, 1 },
    { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
    { 1, 1, 1, 1, -1, -1, -1, -1, -1, -1 } };

  char x1[] = { '+', '-', '*', '/', '(', ')', '[', ']', '{', '}' };// 栈顶元素
  char x2[] = { '+', '-', '*', '/', '(', ')', '[', ']', '{', '}' };// 算术表达式中的元素
  int k = 0, m, n = 0;
  for (m = 0; m < 10; m++) // 查找2个进行比较的运算符在表中的位置,并返回比较结果
  {
   for (n = 0; n < 10; n++) 
   {
    if (x1[m] == a && x2[n] == b) 
    {
     k = 1;
     break; // 找到比较结果后,跳出循环
    }
   }
   if (k == 1)
    break;
  }
  return s[m][n];// 返回比较结果
 }

 public void actionPerformed(ActionEvent e) 
 {
  if (e.getSource() == jButton1) 
  {
   show += "1";
   text.setText(show);
  }
  if (e.getSource() == jButton2) 
  {
   show += "2";
   text.setText(show);
  }
  if (e.getSource() == jButton3) 
  {
   show += "3";
   text.setText(show);
  }
  if (e.getSource() == jButton4) 
  {
   show += "4";
   text.setText(show);
  }
  if (e.getSource() == jButton5) 
  {
   show += "5";
   text.setText(show);
  }
  if (e.getSource() == jButton6) 
  {
   show += "6";
   text.setText(show);
  }
  if (e.getSource() == jButton7) 
  {
   show += "7";
   text.setText(show);
  }
  if (e.getSource() == jButton8) 
  {
   show += "8";
   text.setText(show);
  }
  if (e.getSource() == jButton9) 
  {
   show += "9";
   text.setText(show);
  }
  if (e.getSource() == jButton10) 
  {
   show += "0";
   text.setText(show);
  }
  if (e.getSource() == jButton11) 
  {
   show += "+";
   text.setText(show);
  }
  if (e.getSource() == jButton12) 
  {
   show += "-";
   text.setText(show);
  }
  if (e.getSource() == jButton13) 
  {
   show += "*";
   text.setText(show);
  }
  if (e.getSource() == jButton14) 
  {
   show += "/";
   text.setText(show);
  }
  if (e.getSource() == jButton15) 
  {
   show += "(";
   text.setText(show);
  }
  if (e.getSource() == jButton16) 
  {
   show += ")";
   text.setText(show);
  }
  if (e.getSource() == jButton17) 
  {
   show += "[";
   text.setText(show);
  }
  if (e.getSource() == jButton18) 
  {
   show += "]";
   text.setText(show);
  }
  if (e.getSource() == jButton19) 
  {
   show += "{";
   text.setText(show);
  }
  if (e.getSource() == jButton20) 
  {
   show += "}";
   text.setText(show);
  }
  if (e.getSource() == jButton21) 
  {
   show = "";
   text.setText("");
   text1.setText("");
  }
  if (e.getSource() == jButton22) 
  {
   show += "=";
   text.setText(show);

   char str1[] = new char[50];
   char str2[] = new char[50];
   float result = 0;

   str1 = show.toCharArray();
   str2 = TranSmit(str1);
   result = Count(str2);

   text1.setText((new String(str2)).trim());
   text.setText("" + result);
   show = "";
  }
 }

 private void initComponents() 
 {
  text.setBounds(10, 10, 270, 30);
  text1.setBounds(10, 50, 270, 30);
  jButton1.setBounds(10, 90, 60, 25);
  jButton2.setBounds(80, 90, 60, 25);
  jButton3.setBounds(150, 90, 60, 25);
  jButton4.setBounds(220, 90, 60, 25);
  jButton5.setBounds(10, 120, 60, 25);
  jButton6.setBounds(80, 120, 60, 25);
  jButton7.setBounds(150, 120, 60, 25);
  jButton8.setBounds(220, 120, 60, 25);
  jButton9.setBounds(10, 150, 60, 25);
  jButton10.setBounds(80, 150, 60, 25);
  jButton11.setBounds(150, 150, 60, 25);
  jButton12.setBounds(220, 150, 60, 25);
  jButton13.setBounds(10, 180, 60, 25);
  jButton14.setBounds(80, 180, 60, 25);
  jButton15.setBounds(150, 180, 60, 25);
  jButton16.setBounds(220, 180, 60, 25);
  jButton17.setBounds(150, 210, 60, 25);
  jButton18.setBounds(220, 210, 60, 25);
  jButton19.setBounds(10, 210, 60, 25);
  jButton20.setBounds(80, 210, 60, 25);
  jButton21.setBounds(10, 240, 60, 25);
  jButton22.setBounds(80, 240, 60, 25);

  jButton1.setText("1");
  jButton2.setText("2");
  jButton3.setText("3");
  jButton4.setText("4");
  jButton5.setText("5");
  jButton6.setText("6");
  jButton7.setText("7");
  jButton8.setText("8");
  jButton9.setText("9");
  jButton10.setText("0");
  jButton11.setText("+");
  jButton12.setText("-");
  jButton13.setText("*");
  jButton14.setText("/");
  jButton15.setText("(");
  jButton16.setText(")");
  jButton17.setText("[");
  jButton18.setText("]");
  jButton19.setText("{");
  jButton20.setText("}");
  jButton21.setText("CE");
  jButton22.setText("=");

  jButton1.addActionListener(this);
  jButton2.addActionListener(this);
  jButton3.addActionListener(this);
  jButton4.addActionListener(this);
  jButton5.addActionListener(this);
  jButton6.addActionListener(this);
  jButton7.addActionListener(this);
  jButton8.addActionListener(this);
  jButton9.addActionListener(this);
  jButton10.addActionListener(this);
  jButton11.addActionListener(this);
  jButton12.addActionListener(this);
  jButton13.addActionListener(this);
  jButton14.addActionListener(this);
  jButton15.addActionListener(this);
  jButton16.addActionListener(this);
  jButton17.addActionListener(this);
  jButton18.addActionListener(this);
  jButton19.addActionListener(this);
  jButton20.addActionListener(this);
  jButton21.addActionListener(this);
  jButton22.addActionListener(this);
  
  add(text);
  add(text1);
  add(jButton1);
  add(jButton2);
  add(jButton3);
  add(jButton4);
  add(jButton5);
  add(jButton6);
  add(jButton7);
  add(jButton8);
  add(jButton9);
  add(jButton10);
  add(jButton11);
  add(jButton12);
  add(jButton13);
  add(jButton14);
  add(jButton15);
  add(jButton16);
  add(jButton17);
  add(jButton18);
  add(jButton19);
  add(jButton20);
  add(jButton21);
  add(jButton22);
  
  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  setLayout(null);
  setBounds(300, 300, 300, 300);
  setVisible(true);
 }

 public static void main(String args[]) 
 {
  new Jisuanqi();
 }
}
/*<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
 <HEAD>
  <TITLE> New Document </TITLE>
  <META NAME="Generator" CONTENT="EditPlus">
  <META NAME="Author" CONTENT="">
  <META NAME="Keywords" CONTENT="">
  <META NAME="Description" CONTENT="">
 </HEAD>

 <BODY>
  <APPLET  CODE="Jisuanji.class"  HEIGHT=450 WIDTH=450></APPLET>
 </BODY>
</HTML>
*/
默认分类 | 阅读 688 次
文章评论,共0条
游客请输入验证码