关于迭代器
2015-12-28 22:16
225 查看
以下代码模拟了迭代器的创建和使用。
先创建一个类,并定义迭代器常有的hasNext()和next()方法。
再创建一个测试类,并引上述类的方法计算用户输入的公式。
以上程序是实现的是根据用户输入的算式输出准确的计算结果。如输入:6+8/2+3*2,输入结果为:6+8/2+3*2=16.0
先创建一个类,并定义迭代器常有的hasNext()和next()方法。
package caculator; import java.util.LinkedList; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Formula { private String str; public Formula(String str) { super(); this.str = str.trim(); } public class Iterator{ int from; String regex = "\\d+(\\.\\d+)?|[+/\\-*]"; //Matcher m = Pattern.compile(regex).matcher(str); public String next(){ Matcher m = Pattern.compile(regex).matcher(str); m.find(from); String s = m.group(); from = m.end(); return s; } public Boolean hasNext(){ return from < str.length(); } } public double caculator(){ LinkedList<Double> list1 = new LinkedList<>(); LinkedList<String> list2 = new LinkedList<>(); Iterator it = new Iterator(); while(it.hasNext()){ String s = it.next(); if(s.matches("\\d+(\\.\\d+)?")){ list1.add(Double.parseDouble(s)); }else if(s.matches("[+\\-]")){ list2.add(s); }else{ double a = list1.removeLast(); double b = Double.parseDouble(it.next()); double c = caculate(a,s,b); list1.add(c); } } while(list2.size()!=0){ double a = list1.removeFirst(); double b = list1.removeFirst(); String s = list2.removeFirst(); double c = caculate(a,s,b); list1.addFirst(c); } return list1.get(0); } private double caculate(double a, String s, double b) { double r = 0; switch (s.charAt(0)) { case '+': r = a+b; break; case '-': r=a-b; break; case '*': r=a*b; break; case '/': r=a/b; break; default: break; } return r; } }
再创建一个测试类,并引上述类的方法计算用户输入的公式。
package caculator; import java.util.Scanner; import caculator.Formula.Iterator; public class Test1 { public static void main(String[] args) { System.out.println("请输入计算公式:"); String s = new Scanner(System.in).nextLine(); Formula f = new Formula(s); Double d = f.caculator(); System.out.println(s+"="+d); } }
以上程序是实现的是根据用户输入的算式输出准确的计算结果。如输入:6+8/2+3*2,输入结果为:6+8/2+3*2=16.0
相关文章推荐
- Struts2国际化
- 人生如果是十分…
- 自定义布局,堆叠布局来袭!
- modelsim仿真波形理解
- 手机访问网站获取外网IP
- 使用Keil MDK运行第一个STM32程序
- Linux 集群文件系统简介
- Spring定时任务的几种实现
- CentOS启动流程与grub
- 手机信息的获取(手机IMEI,手机sim卡的IMSI,网络类型(WiFi,LTE(即4G)等),信号强度(蜂窝网络非WiFi),经纬度)
- PIC32MZ tutorial -- Output Compare
- POJ 3190 Stall Reservations(贪心—区间问题+优先队列维护)
- UICollectionView基础
- 均方根信息滤波(SRIF)测试(二)
- 在Mac机上remote到windows
- 学生, 教师封装的类
- PID2 / 开心的金明(rqn)
- Js-Html 前端系列--Ajax
- Hadoop分布式文件系统:架构和设计要点
- 连续变量优化问题的模拟退火算法求解