`
yutaozxy
  • 浏览: 68991 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

递归求解表达式

    博客分类:
  • java
阅读更多

import java.util.Stack;

public class StackTest {
    private  final String[] sym = { "Nand", "Nor", "Or", "And" };
    private  Stack opNumber = new Stack();
    private  Stack opSym = new Stack();

    public void parseSource(String source) {
        char sources[] = source.toCharArray();

        for (int i = 0; i < sources.length; i++) {
            if ('(' == sources[i]) {

            } else if (')' == sources[i]) {

            } else if (',' == sources[i]) {

            } else {
                    int j = i;
                    for (; ((sources[j] >= 'A' && sources[j] <= 'Z') || (sources[j] >= 'a' && sources[j] <= 'z')); j++);
                    String value = source.substring(i,j);
                    Item item = new Item();
                    item.setValue(value);
                    boolean exist = false;
                    for(String sy : sym) {
                        if(sy.equals(value)) {
                           opSym.push(item);
                           exist = true;
                           break;
                        }
                    }
                    if(!exist) {
                        opNumber.push(item);
                    }
                    i = j;
            }

        }
    }

    private void calculate() {
        StringBuilder sb = new StringBuilder();
        while (opSym.size() > 0) {
            Item item = (Item) opSym.pop();
            Item first = (Item) opNumber.pop();
            Item second = (Item) opNumber.pop();
            if (sym[0].equals(item.getValue())) {
                sb.append(second.getValue()).append(" Nand ").append(first.getValue());
            } else if (sym[1].equals(item.getValue())) {
                sb.append(second.getValue()).append(" Nor ").append(first.getValue());
            } else if (sym[2].equals(item.getValue())) {
                sb.append(second.getValue()).append(" Or ").append(first.getValue());
            } else if (sym[3].equals(item.getValue())) {
                sb.append(second.getValue()).append(" And ").append(first.getValue());
            }
            Item value = new Item();
            value.setValue(sb.toString());
            sb = new StringBuilder();
            opNumber.push(value);
        }

        System.out.println(((Item) opNumber.pop()).getValue());
    }

    class Item {
        String value;
        int priority;

        public String getValue() {
            return value;
        }

        public void setValue(String value) {
            this.value = value;
        }

        public int getPriority() {
            return priority;
        }

        public void setPriority(int priority) {
            this.priority = priority;
        }

    }

    public static void main(String[] args) {
        StackTest stackTest = new StackTest();
        stackTest.parseSource("Nand(yu,Nor(B,C))");
        stackTest.calculate();
    }
}

 

 

 

 

 

http://download.csdn.net/detail/yjflinchong/3144840

 

http://www.osischool.com/

 

 

http://www.cnblogs.com/kevintian/articles/1086994.html

 

 

http://code.google.com/p/morphia/wiki/QuickStart

 

http://code.google.com/docreader/#p=morphia&s=morphia&t=Datastore

 

 

 

package com.test;

 

import java.net.UnknownHostException;

import java.util.ArrayList;

import java.util.HashSet;

import java.util.Iterator;

import java.util.List;

import java.util.Set;

 

import org.bson.types.ObjectId;

 

import com.google.code.morphia.Datastore;

import com.google.code.morphia.Morphia;

import com.google.code.morphia.query.Query;

import com.mongodb.Mongo;

import com.mongodb.MongoException;

import com.test.entity.MyEntity;

 

public class MorphiaFindData {

 

public static void main(String[] args) throws UnknownHostException, MongoException {

Mongo mongo = new Mongo("localhost", 27017);

Datastore ds = new Morphia().createDatastore(mongo,"myDB");

//      通过ObjectId来查询

// MyEntity entity = ds.get(MyEntity.class,new ObjectId("4edcd4f35c65f882738a5da8"));

//    System.out.println(entity.getName());

 

// MyEntity enty = new MyEntity();

// enty.setId(new ObjectId("4edcd4f35c65f882738a5da8"));

//      MyEntity g = ds.get(enty)

//    System.out.println(g.getName());

// List<ObjectId> lists = new ArrayList<ObjectId>();

// lists.add(new ObjectId("4edcd4f35c65f882738a5da8"));

// lists.add(new ObjectId("4edcdd455c653ebc1027bdf6"));

// Query<MyEntity> querys = ds.get(MyEntity.class,(Iterable<ObjectId>)lists);

// List<MyEntity> result = querys.asList();

// for(MyEntity mEntity : result) {

// System.out.println("Name: " + mEntity.getName());

// }

 

ds.find(MyEntity.class).get();//得到查询集中的第一个实体

//从返回的结果集中在根据选择条件选择相应的结果

Query<MyEntity> queries = ds.find(MyEntity.class);

Iterator<MyEntity> iterator = queries.iterator(); 

//在使用queries.iterator()方法时Mophia才会真的去访问Mongodb获取数据

while(iterator.hasNext()) {

System.out.println("Name: " + iterator.next().getName());

}

}

 

}


 

 

分享到:
评论

相关推荐

    java递归求解带方法调用的表达式.rar

    加减乘除和括号 的表达式,比如: ( 1 + 2 ) * 3 + 4,不能求解 : sum( 3, 4, 5 ) / 2 - 4 -sum( 5, 3, 1 ) 这样的, 于是自己在此基础上写了一个可以求解带方法调用表达式的工具类,组要是通过递归将方法调用,...

    CSP-S 2021 提高组初赛试题高清PDF去水印

    - 递归求解表达式,通过计算得出结果。 12. **斐波那契数列**: - 直接递归求解斐波那契数列的时间复杂度是指数级的。 13. **组合问题**: - 从8个苹果中选择不相邻的苹果,可以用组合数学解决。 14. **几何...

    数据结构课程设计\算术表达式求解

    在数据结构课程设计中,"算术表达式求解"是一个经典的实践项目,它涉及到编译原理、数据结构和算法等多个计算机科学的核心领域。在这个项目中,通常会使用C语言来实现,因为C语言的效率高且易于理解,适合处理底层的...

    数据结构:栈的应用-算术表达式求解-后序表达式法

    本文主要探讨的是数据结构中的一个重要概念——栈(Stack),以及它在处理算术表达式求解中的应用,特别是如何将中序表达式转换为后序表达式(也称为逆波兰表示法)。 栈是一种具有“后进先出”(Last In, First ...

    c++ 计算表达式结果(二叉树、后缀表达式)

    本篇将详细讲解如何使用C++来处理中缀表达式,并通过构建二叉树以及转换为后缀表达式的方式来求解表达式的结果。 首先,我们要理解什么是中缀表达式。中缀表达式是我们在日常生活中最常使用的表达式形式,例如 "2 +...

    递归方程求解

    ### 递归方程求解方法详解 #### 一、递推法 递推法是一种直接根据递归方程的定义来求解递归方程的方法。这种方法适用于那些可以直接通过迭代计算来找到规律的递归方程。 **例1:Hanoi塔问题** Hanoi塔问题是一个...

    c++表达式求解程序

    通过定义一系列递归函数来匹配和处理语法结构,可以实现表达式求解。 6. **表达式求值**:在构建了表达式树或后缀表达式后,就可以进行求值。对于二叉表达式树,可以通过遍历树的后序顺序来计算结果。对于后缀...

    表达式求解 数据结构

    表达式求解是计算机科学中一个基础性问题,该问题的解决方案有多种,如递归下降解析、LR解析、算符优先算法等。在这里,我们将讨论基于算符优先算法的表达式求解方法,该方法使用顺序栈和运算符栈来实现实数内的加减...

    二叉树实现简易计算器

    - **构建流程**:首先,将中缀表达式转换为后缀表达式,然后根据后缀表达式的顺序逐个插入节点构建二叉表达式树。 - **代码示例**:在提供的部分代码中,函数 `createBTree` 负责创建二叉表达式树。它接收当前节点...

    表达式求值,用二叉树

    在计算机科学中,利用二叉树来表示和求解表达式是一种常见的方法。这种方法的核心是通过构建一个以运算符为节点、以操作数为叶子节点的二叉树结构,来实现表达式的解析和计算。 #### 构建表达式树的原则: 1. **...

    数据结构算术表达式的求解大学毕业论文.doc

    * 递归下降解析:使用递归函数来解析表达式,然后进行计算。 * 迭代解析:使用迭代函数来解析表达式,然后进行计算。 四、数据结构在算术表达式求解中的应用 数据结构在算术表达式求解中扮演着重要的角色,常用的...

    逆波兰表达式求解的程序(2种方法)

    逆波兰表达式,又称后缀表达式,是一种用于...总结,逆波兰表达式的求解涉及到数据结构(栈)、算法(递归下降解析)以及编程语言的基本操作。理解并掌握这两种方法,有助于深入理解计算机科学中的计算原理和算法设计。

    数据结构:栈的应用-四则算术表达式求解

    这种特性使得栈在处理具有顺序要求的问题时特别有效,比如处理括号匹配、递归调用和,当然,还包括解析四则算术表达式。 四则算术表达式通常包含数字、运算符(加、减、乘、除)以及可能的括号。求解这类表达式的一...

    数据结构课程设计算术表达式求解

    在这个项目中,我们聚焦于“算术表达式求解”,这是一个典型的数据结构应用,涉及到解析、存储和计算数学表达式。 首先,我们需要理解算术表达式的基本构成。算术表达式通常由数字、运算符(如加号"+"、减号"-"、...

    综合实验三基于二叉树的表达式求值算法.pdf

    实验中,学生需要编写程序来读取输入的表达式,创建表达式树,然后利用后序遍历表达式树来求解表达式的值。 三、实验提示 在实验中,学生需要将表达式分解为操作数和运算符,然后创建相应的二叉树。二叉树的递归...

    精选_基于C语言实现的表达式求解_源码打包

    在这个项目中,开发者可能使用了自定义的解析算法,例如递归下降解析,这种算法利用函数递归来对应于输入表达式的语法结构。在解析过程中,可能会遇到优先级和结合性问题,这些问题需要通过左结合或右结合规则以及...

    Scratch递归程序设计的教学探讨.pdf

    Scratch 递归程序设计的教学探讨可以通过对递归算法原理的分析,提出抓住三个要点及构造递归表达式的学习方法,并结合 Scratch 编程风格,提出基于 Scratch 的递归算法教学引导思路,并分析探讨更有效的递归教学...

    递归求fabonacci数列.docx

    ### 递归求解 Fibonacci 数列 #### 一、引言 数列是数学中一个重要的概念,它是由一系列按照特定顺序排列的数字组成的集合。数列的研究在数学的各个分支中都扮演着重要的角色,从代数到微积分,再到更高级的数学...

    二叉表达式树

    对于求解表达式,中序遍历是最合适的,因为它按照操作数-运算符-操作数的顺序访问节点,恰好符合中缀表达式的运算规则。 ```cpp int evaluateTree(ExpressionNode* node) { if (node-&gt;type == ExpressionNode::...

    数据结构课程设计——算数表达式求解(含报告)

    在数据结构课程设计中,算术表达式求解是一个重要的实践课题,它涉及到计算机科学的基础——算法和数据结构。这个项目旨在让学生理解如何通过编程实现对各种算术运算的支持,包括加法、减法、乘法、除法、乘方以及单...

Global site tag (gtag.js) - Google Analytics