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

主要代码:

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. 关于图片加载非常爽的一个三方控件 fresco,一个三fresco

    Hi  EveryBody 今天来玩一个非常爽的控件 fresco 到底有多爽呢 接着看就知道了 首先 来看看fresco 是个神马东西 https://github.com/facebook/fre ...

  2. CSS3_概述、发展史、模块介绍、与浏览器之间的关系

    一.CSS3概述和CSS3的发展史: 1.css3概述: CSS3是CSS2的升级版本,3只是版本号,它在CSS2.1的基础上增加了很多强大的新功能.    目前主流浏览器chrome.safari. ...

  3. js boolean 判断

    在写项目的时候出现了一个这样的问题,虽然问题解决了,但是还是有点疑问. 在数据库中设计的表的一个字段为是否审核(is_vaild) 类型 tinyint(1) 对应的在 java中就是布尔类型(boo ...

  4. UEditor 之查询当前编辑区域的状态是源码模式还是可视化模式

    在使用百度的编辑器的时候,遇到了这样的一个问题: 解决方法是 使用了两个命令:

  5. Html_页面的高度宽度等

    offsetTop 指元素距离上方或上层控件的位置,整型,单位像素. offsetLeft 指元素距离左方或上层控件的位置,整型,单位像素. offsetWidth 指元素控件自身的宽度,整型,单位像 ...

  6. What is the difference between extensibility and scalability?

    You open a small fast food center, with a serving capacity of 5-10 people at a time. But you have en ...

  7. 再说TCP神奇的40ms

    版权声明:本文由安斌原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/186 来源:腾云阁 https://www.qclou ...

  8. nodeschool.io 9

    ~~ JUGGLING ASYNC ~~ 其实就是一个循环,在循环里面输出的顺序,和排列后在外面的顺序不一样,这是为什么呢? 用第三方async包,直接报错了…… This problem is th ...

  9. WMI执行远程文件(RPC)

    通过wmi在远程机上执行命令(wmi:windows management interface 可以通过一个公共的接口访问不同操作系统(windows系统)的构成单元,利用它可以高效的管理远程和本地的 ...

  10. Permutations [LeetCode]

    Given a collection of numbers, return all possible permutations. For example,[1,2,3] have the follow ...