这次作业,我们选择的是网页开发,后来我们小组才知道自己这方面的知识还是太匮乏了。

主要代码:

public class calcu extends HttpServlet{
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String smax="";
String smin="";
String snum="";
int[] control=new int[2];
smax=request.getParameter("Maxnum");
smin=request.getParameter("Minnum");
snum=request.getParameter("Num");
String a=request.getParameter("1");
String b=request.getParameter("2");
control[1]=Integer.parseInt(a);
control[0]=Integer.parseInt(b);
int max=Integer.parseInt(smax);
int min=Integer.parseInt(smin);
int num=Integer.parseInt(snum);
caculate(max,min,num,control);
}
char ops[] = { '+', '-', '*', '/', '(', ')', '=' };
char cmp[][] = { { '>', '>', '<', '<', '<', '>', '>' },
{ '>', '>', '<', '<', '<', '>', '>' },
{ '>', '>', '>', '>', '<', '>', '>' },
{ '>', '>', '>', '>', '<', '>', '>' },
{ '<', '<', '<', '<', '<', '=', ' ' },
{ '>', '>', '>', '>', ' ', '>', '>' },
{ '<', '<', '<', '<', '<', ' ', '=' } }; boolean IsOperator(char ch)
{
for (int i = 0; i < 7; i++)
if (ch == ops[i])
return true;
return false;
}
char Compare(char ch1, char ch2)
{
int i, m = 0, n = 0;
char priority;
for (i = 0; i < 7; i++) { //找到相比较的两个运算符在比较矩阵里的相对位置
if (ch1 == ops[i])
m = i;
if (ch2 == ops[i])
n = i;
}
priority = cmp[m][n];
return priority;
} Boolean Compute(double x, char op, double y, double z)
{
switch (op) {
case '+': z = x + y;
break;
case '-': z = x - y;
break;
case '*': z = x * y;
break;
case '/': if (y==0) {
z = x / y;
break;
}
return false;
}
return true;
}
int ExpEvaluation(char str[], int result)
{
double a, b, v = 0;
char ch, op;
int temp, i = 0;
Stack<Character> optr = new Stack<Character>();
Stack<Integer> opnd = new Stack<Integer>();
optr.push('=');
ch = str[i++];
while (ch != '=' || optr.pop() != '=') {
while (ch == ' ') //跳过空格
ch = str[i++];
if (IsOperator(ch)) { //是7种运算符之一
switch (Compare(optr.pop(), ch)) {
case '<': //栈顶运算符优先级低
optr.push(ch);
ch = str[i++];
break;
case '=': //脱括号并接收下一字符
optr.pop();
ch = str[i++];
break;
case '>': //栈顶运算符优先级高,退栈并将运算结果入栈
op = optr.pop();
optr.pop();
b = opnd.pop();
opnd.pop();
a = opnd.pop();
opnd.pop();
if (Compute(a, op, b, v)) { //计算v = a <op> b
opnd.push((int) v);
break;
}
else {
result = 0;
return result;
}
}
}
else { //是数字
temp = ch - '0'; //将字符转换为十进制数
ch = str[i++];
while (!IsOperator(ch) && ch != ' ') {
temp = temp * 10 + ch - '0'; //将逐个读入运算数的各位转化为十进制数
ch = str[i++];
}
opnd.push(temp); //数值入栈
}
}
result = opnd.pop();
return result;
} public void caculate(int num_max,int num_min,int itemnum,int control[]) {
int bracket_num;
int num_num;
String express = "";
char symbol[]=new char[]{'+','-','*','/'};
char[] c=new char[20];
String item[]=new String[itemnum];
int[] result = new int[itemnum];
for(int count=0; count<itemnum; count++)
{
num_num =(int) (Math.random() % 10);
String str[] = new String[num_num];
if (num_num == 0 || num_num == 1)
{
count--;
continue;
}
int num[] = new int[num_num];
int symnum[] = new int[num_num - 1];
char sym[] = new char[num_num - 1]; int bracket_leftposition, bracket_rightposition;
int bracket_left_time[] = new int[num_num]; //定义左、右括号生成次数数组,下标为数字位置
int bracket_right_time[] = new int[num_num];
String bracket_left[] = new String[num_num]; //定义左右括号字符串型数组
String bracket_right[] =new String[num_num];
for (int rcount = 0; rcount<num_num; rcount++) //左、右括号生成次数初始化
{
bracket_left_time[rcount] = 0;
bracket_right_time[rcount] = 0;
} //给参与计算的数赋值(指定数值范围)
for (int cnum = 0; cnum<num_num; cnum++)
{
num[cnum] =(int) (Math.random() % (num_max - num_min + 1) + num_min);
} //随机生成式子的各个位置的符号
for (int snum = 0; snum<num_num - 1; snum++)
{
symnum[snum] =(int) (Math.random() % control[0]);
sym[snum] = symbol[symnum[snum]];
} if (control[1] == 0)
{
bracket_num = (int) (Math.random() % 3 + 1);
//生成括号次数
for (int bcount = 0; bcount<bracket_num; bcount++)
{
bracket_leftposition = (int) (Math.random() % num_num); //随机生成左右括号的位置
bracket_rightposition = (int) (Math.random() % num_num);
if ((bracket_leftposition >= bracket_rightposition)||((bracket_leftposition==0)&&(bracket_rightposition==num_num-1))) //先剔除部分一次性在一个数左右同时生成左右括号和在整个式子前后生成式子的情况
{
continue;
}
bracket_left_time[bracket_leftposition]++; //该位置数左括号生成次数+1
bracket_right_time[bracket_rightposition]++;
}
}
for (int stnum = 0; stnum < num_num-2; stnum++)
{
if ((symbol[symnum[stnum]] == '/') && (symbol[symnum[stnum + 1]] == '/'))
{
bracket_left_time[stnum]++;
bracket_right_time[stnum + 1]++;
}
}
for (int snum = 0; snum < num_num ; snum++)
{ if (bracket_left_time[snum] == 1)
{
bracket_left[snum] = "(";
}
if (bracket_left_time[snum] == 2)
{
bracket_left[snum] = "((";
}
if (bracket_left_time[snum] == 3)
{
bracket_left[snum] = "(((";
}
if (bracket_right_time[snum] == 1)
{
bracket_right[snum] = ")";
}
if (bracket_right_time[snum] == 2)
{
bracket_right[snum] = "))";
}
if (bracket_right_time[snum] == 3)
{
bracket_right[snum] = ")))";
}
for (int bpcount = 0; bpcount<num_num; bpcount++) //再次扫描数字左右括号生成次数相等的情况并排除
{
if (bracket_left_time[bpcount] == bracket_right_time[bpcount])
{
bracket_right[bpcount] = "";
bracket_left[bpcount] = "";
}
}
} for (int i = 0; i < num_num; i++)
{
int temp = num[i];
str[i] = temp+"";
}
for (int ph = 0; ph<num_num - 1; ph++)
{
express =express+bracket_left[ph]+str[ph]+bracket_right[ph]+sym[ph];
}
express = express + bracket_left[num_num - 1] +str[num_num - 1]+ bracket_right[num_num - 1];
item[count] = express+"="; int ans=ExpEvaluation(c, result[count]); //求表达式的值
String anstr=ans+"";
JavaBean jBean=new JavaBean();
DBBean sBean=new DBBean();
jBean.setStr(item[count]);
jBean.setAnswer1(anstr);
String sql="insert into record(str,ans1) values(?,?)";
int numresult=sBean.getInsert(sql,jBean);
express="";
} } }

  

javaweb-四则运算的更多相关文章

  1. Javaweb——四则运算---18.11.01

    ---恢复内容开始--- test.jsp <%@ page language="java" contentType="text/html; charset=utf ...

  2. 四则运算自动出题之javaweb版

    四则运算出题机之JAVAWEB版 要求还是和之前的出题形式一样 begin.jpg <%@ page language="java" contentType="te ...

  3. 四则运算————javaweb版

    1.设计思路: 定义一个类arithmetic,在该类中的定义相关成员,随机产生的题目以及答案用数组承接,在第一个jsp里面用户输入题目数量以及设置做题时间,将这两个数传到第二个jsp页面,在此页面定 ...

  4. 悲催的二柱子们做小学二年级四则运算题(Javaweb)

    <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding= ...

  5. Javaweb版四则运算

    显示出题界面shu01.jsp <%@ page language="java" contentType="text/html; charset=UTF-8&quo ...

  6. JavaWeb入门笔记

    Java web笔记 一.HTTP协议 HTTP(超文本传输协议),它是一种主流B/S架构中应用的通信协议.具有以下特点: 1.无状态 服务端不会记录客户端每次提交的请求,服务器一旦相应客户端之后,就 ...

  7. 四则运算web版需求规格说明书

    目录 1引言... 4 1.1  目的... 4 1.2  背景... 4 1.3  术语... 4 1.4  预期读者与阅读建议... 5 1.5  参考资料... 6 1.6  需求描述约定... ...

  8. 从啥也不会到可以胜任最基本的JavaWeb工作,推荐给新人的学习路线(二)

    在上一节中,主要阐述了JavaScript方面的学习路线.先列举一下我朋友的经历,他去过培训机构,说是4个月后月薪过万,虽然他现在还未达到这个指标. 培训机构一般的套路是这样:先教JavaSE,什么都 ...

  9. JavaWeb——Servlet

    一.基本概念 Servlet是运行在Web服务器上的小程序,通过http协议和客户端进行交互. 这里的客户端一般为浏览器,发送http请求(request)给服务器(如Tomcat).服务器接收到请求 ...

  10. JavaWeb——Listener

    一.基本概念 JavaWeb里面的listener是通过观察者设计模式进行实现的.对于观察者模式,这里不做过多介绍,大概讲一下什么意思. 观察者模式又叫发布订阅模式或者监听器模式.在该模式中有两个角色 ...

随机推荐

  1. Android GestureDetector方法详解

    为了加强点击.拖动响应事件,Android提供了GestureDetector手势识别类.通过GestureDetector.OnGestureListener来获取当前被触发的操作手势(Single ...

  2. virtualbox虚拟机上安装centOS的网络配置(安装centos时选择桥接网络)

    最近接触hadoop,需要在在Linux上面开发,所以我装了一个virtualbox虚拟机,在该虚拟机上面安装了一个centOS系统.linux系统是装好了,但是网络配置却另人头疼.我主要是想让宿主机 ...

  3. R语言实战

    教材目录 第一部分 入门 第一章 R语言介绍 第二章 创建数据集 第三章 图形初阶 第四章 基本数据管理 第五章 高级数据管理 第二部分 基本方法 第六章 基本图形 第七章 基本统计方法 第三部分 中 ...

  4. 【转】APP的缓存文件到底应该存在哪?看完这篇文章你应该就自己清楚了

    只要是需要进行联网获取数据的APP,那么不管是版本更新,还是图片缓存,都会在本地产生缓存文件.那么,这些缓存文件到底放在什地方合适呢?系统有没有给我们提供建议的缓存位置呢?不同的缓存位置有什么不同呢? ...

  5. jmeter笔记1

    使用 JMeter 分布式性能测试       作为一个纯 JAVA 的GUI应用,JMeter 对于CPU和内存的消耗还是很惊人的, 所以当需要模拟数以千计的并发用户时,使用单台机器模拟所有的并发用 ...

  6. Ubuntu 14.04 分区方案

    我磁盘大概还有70多G的空间吧,我全部拿来使用的.真实的双系统哦. 一般来讲,linux系统分区最少要包括/和/swap两个.这样据说会影响性能,没有这样安装过,就无从考证啦.其实就是重装系统的时候, ...

  7. 《Java程序设计》第九周学习总结

    20145224 <Java程序设计>第九周学习总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的 ...

  8. 通过chrome 获取网站的cookie信息

    通过chrome 打开网页 审核元素 登录网站后 network列表中查看 home?开头列表项的 cookie信息

  9. openCV1

    openCV是一个提供有C++ , android , python的开源图像处理的类库 中文论坛的网址是http://www.opencv.org.cn/forum.php?mod=forumdis ...

  10. JSCore的基本使用

    一.简单介绍 JSCore全称为JavaScriptCore,是苹果公司在iOS中加入的一个新的framework.该framework为OC与JS代码相互操作的提供了极大的便利.该工程默认是没有导入 ...