test


import java.util.StringTokenizer;
 
import javax.swing.JOptionPane;
 
/*
 * Created on Jul 22, 2005
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
 
/**
 * @author sunan.ye
 *
 * TODO To change the template for this generated type comment go to Window -
 * Preferences - Java - Code Style - Code Templates
 */
public class expression {
 private String[] variable = new String[100000];
  private String[] constant = new String[100000];
  private int m = 0;
  private int n = 0;
 
  public void input() {
    String expressions = JOptionPane.showInputDialog(null,
      "Please input expressions:");
    expressions.trim();
    StringTokenizer st = new StringTokenizer(expressions, ";");
    while (st.hasMoreTokens()) {
      String expression = st.nextToken();
      int k;
      for(int i =0;i<expression.length();i++){
       if(expression.charAt(i) == '='){
        k = i;
        break;  
       }
      }
      if(k == 0){
       System.out.println("Variable excepted");
       break;
      }
      if(k == expression.length() - 1){
       System.out.println("Constant excepted");
       break;
      }
      StringTokenizer st1 = new StringTokenizer(expression, "=");
      while (st1.hasMoreTokens()) {
       //保存表达式左边
       String left = st1.nextToken();
       //保存表达式右边
       String right = st1.nextToken();
       int p = checkVariable(left);
       int q = checkConstant(right);
       //变量不合理
       if(p == -2)
        break;
       //常量不合理
       if(q == -2)
        break;
       //变量合理
       //如果变量是新定义的
       if (p == -1) {
         //判断常量是否是数字
         if (q == -1){
          //将新变量保存
          variable[m++] = left;
           //将常量保存
           constant[n++] = right;
         }
         if(q == 1){
          //将新变量保存
          variable[m++] = left;
           //将常量保存
           constant[n++] = constant[checkVariable(right)];
         } 
        //变量已存在
       } else if (q == -1)//常量是数字直接保存
           constant[p] = right;
         else//右边为已定义变量
           constant[p] = constant[checkVariable(right)];
      }
    }
/* 
    for (int i = 0; i < m; i++)
    System.out.println(variable[i] + constant[i]);
*/  
  }
  public void checkexpression(){
   
  }
  
 //检查表达式左边,判断变量是否是新定义的,以及是否合理
  public int checkVariable(String left) {
    /*
    if(left == null){ 
     System.out.println("Variable excepted");
     return -2;
    }
    */
    //变量的第一个字符只能为a..z或者_
    int first = (int)left.charAt(0);
    if(!((first >= 65 && first <= 90)
      || (first >= 97 && first <=122)
      || first==95)){
      System.out.println("Variable " + left + " error");
      System.out.println("Variable can not include '" +
       (char)first + "'");
      return -2;//表示该变量不合理
    }
    //变量的其他字符只能为a..z,0..9,或者_
    for(int i = 1;i < left.length();i++){
     first = (int)left.charAt(i);
     //判断变量的定义是否合理 
     if(
      !((first >= 65 && first <= 90)
      || (first >= 97 && first <=122)
      || first==95
      || (first >=48 && first <= 57))
      ){
      System.out.println("Variable " + left + " error");
      System.out.println("Variable can not include '" +
       (char)first + "'");
      return -2;//表示该变量不合理
     } 
    }
    
    for (int i = 0; i < m; i++)
      if (left.equals(variable[i]))
       return i;//返回已存在变量的位置
    return -1;//表示该变量为新变量
  }
 //检查表达式右边,判断常量是否是合理
  public int checkConstant(String right) {
    /*
    if(right == null){
     System.out.println("Constant excepted");
     return -2;
    }
    */
    try {
      Integer.parseInt(right);
    } catch (NumberFormatException e) {
      int i;
      for (i = 0; i < m; i++)
       if (right.equals(variable[i]))
        break;//返回已存在变量的位置
      if (i < m) {//右边是已定义变量
//       constant[l] = constant[p];
       return 1;
      } else{
       System.out.println("Number " + right + " format error");
       return -2;
      }
       
    }
    return -1;//常量是数字
  }
 
  public void output() {
    String[] con = new String[100000];
    int k = 0;
    for (int i = 0; i < n; i++){
     int j = 0;
     for(j = 0; j < k;j++){
      if (constant[i].equals(con[j]))
         break;
     }
      if(j==k)
        con[k++] = constant[i];
    }
    for (int i = 0; i < k; i++){
      System.out.print("[");
      for (int j = 0; j < m; j++) {
       if(constant[j].equals(con[i]))
         System.out.print(variable[j]+",");
      }
      System.out.println("]=" + con[i]);
    }
  }
 
  public static void main(String[] args) {
   expression exp = new expression();
    exp.input();
    exp.output();
  }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值