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

主要代码:

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. 关于时区的时间的详解,比如UTC\GMT等

    UTC 和 GMT 及 北京时间的关系 UTC和GMT,这两者几乎是同一概念.它们都是指的格林尼治标准时间,只不过UTC的称呼更为正式一点.两者的区别在于前者是一个天文 上的概念,而 后者是基于一个原 ...

  2. ARM-linux嵌入式开发平台搭建1

    初学嵌入式开发,由于是自学,走了很多弯路,现总结一下嵌入式ARM-LINUX开发环境搭建步骤: 1.安装linux系统,由于初学,我选择fedora 14.安装的具体步骤就不详细说了. 2.安装NFS ...

  3. CSS三种定位机制

    标准文档流 块级元素撑满整个页面div,ul,li,dl,dt,p 行级元素可以一行显示多个span,strong,img,input大部分 一般不设置盒子的高度,另其自动调整 margin属性的au ...

  4. ctrl + d 在phpstorm 和 eclipse 中的不同含义

    Ctrl + d 在phpstrom是复制一行,非常的方便,但是eclipse中却是删除一行,非常的特别.感觉上,phpstorm更注重鼠标,但eclipse貌似更多鼠标和键盘的操作, 默认情况下[p ...

  5. jsp 页面 jstl 日期的计算

    1. <% page import ="java.util.Date"%> 2. <% Date date = new Date(); date = new Da ...

  6. iconv 文件编码相互转换

    iconv 文件编码相互转换 示例: iconv -f utf-8 -t gbk ~/a.txt > ~/b.txt -f 从哪种格式转换 -t 要转换到哪种格式 a.txt要转换的文件 b.t ...

  7. HTTP请求415错误 – 不支持的媒体类型(Unsupported media type)

    HTTP请求415错误 – 不支持的媒体类型(Unsupported media type) 通常有以下情况: 1:检查你的 http 请求头信息,比如 因为 User-Agent 被服务器设置 拒绝 ...

  8. Mybatis学习(壹)

    一.Mybatis的引言 1.Mybatis框架概念:是数据库持久层的框架,对数据库的访问和操作.Mybatis对JDBC的封装,Mybatis替换JDBC开发,解决DAO中的通用问题. 2.JDBC ...

  9. jq实现 禁止对密码框中的内容进行复制、剪切和粘贴操作

    $(function () { $("input:password").on("copy cut paste", function (e) { return f ...

  10. 3D变形旋转

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...