• 出题系统(升级版)


    四则运算系统要求升级了:

    是否有乘除法;
    是否有括号(最多可以支持十个数参与计算);
    数值范围;
    加减有无负数;
    除法有无余数!

    · 思路:是在原有的网页版的基础上进行改动的,不过,改动的比较大,基本改动如下:

    1.首先要把随机生成的四则运算改成多元运算,先前默认的是二元运算,所以方法都要改,随机生成一个数,然后生成一个运算符号,都是累加在String上。随机生成的数比运算符号要多一个!

    2.要实现数值范围要求,随机生成的上限100,改成用户自己定。

    3.实现有无乘除。随机数上限为2无乘除,上限为4有乘除。

    4.结果有无负数,余数。必须要求有方法可以计算随机生成的四则运算,对结果进行要求,将结果存放在数组中。设计方法,可以计算String类型的多项式(带括号的),可以计算出余数的方法,要注意的是,余数只是二元运算才有,二元以上不应该此要求!

    · 对应的代码如下:

    (1)输入界面代码

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    	<title>出题系统</title>
    </head>
    <body >
    
    		<h2>出题系统</h2> 
    		<form action="check.jsp" method="post">
    
    				
    		出题数量:<input type="text" name = "username"><br>
    		<h2>题目样式:1.整数四则运算 2.真分数四则运算</h2>
    		选择:<input type="text" name="choose"><br>
    		<h2>题目样式:1.有乘除 2.无乘除</h2>
    		选择:<input type="text" name="choose3"><br>
    		<h2>题目样式:请输入几元运算</h2>
    		选择:<input type="text" name="choose1"><br>
    		<h2>题目样式:请输入范围</h2>
    		选择:<input type="text" name="choose2"><br>
    		<h2>题目样式:1.有负数 2.无负数</h2>
    		选择:<input type="text" name="choose4"><br>
    		<h2>题目样式:1.有余数 2.无余数</h2>
    		选择:<input type="text" name="choose6"><br>	
    		<h2>题目样式:1.显示答案 2.不显示答案</h2>
    		选择:<input type="text" name="choose5"><br>		
            <input type="submit" value="提交">
    		</form>
    </body>
    </html>
    

      (2)计算.jsp 代码:

    <%@ page language="java" import="java.sql.*" import="java.util.*" contentType="text/html;; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@   page   import= "tianaoweb.com.* "%>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>试卷</title>
    </head>
    <%!
    public static String ztimu(int num1,int num2,int num3)
    {//num1是几元运算,num2是范围,num3是有无乘除法
    	int intVal1 = 0;
    	int ys = 0;
    	String ss = "";
    	for(int i=1;i<=num1;i++)
    	{
    		intVal1 = (int)(Math.random()*num2+1);
    		if(i < num1)
    		{
    			if(num3 == 2)
    				ys = (int)(Math.random()*num3+1);
    			else
    				ys = (int)(Math.random()*(num3+3)+1);
    		}
    		else
    			ys = 0;
    		ss = ss + intVal1;
    		if(ys==0)
    		{
    			ss = ss+"";
    		}
    		if(ys==1){
    			ss = ss +"+";
    		}
    		if(ys==2){
    			ss = ss +"-";
    			}
    		if(ys==3){
    			ss = ss +"*";
    			}
    		if(ys==4){
    			ss = ss +"÷";
    			}	
    	}
    	return ss;
    }
    %>
    <%!
    	public static String ftimu(int num1,int num2,int num3)
    	{//num1是几元运算,num2是范围,num3是有无乘除法
    		int intVal1 = 0;
    		int intVal2 = 0;
    		int ys = 0;
    		String ss = "";
    		for(int i=1;i<=num1;i++)
    		{
    			intVal1 = 0;
    			intVal2 = 0;
    			while(intVal1 == intVal2)
    			{
    				intVal1 = (int)(Math.random()*num2+1);
    				intVal2 = (int)(Math.random()*num2+1);
    				
    				if(intVal1<intVal2)
    				{
    					ss = ss + intVal1+"/"+intVal2;
    				}
    				else
    				{
    					ss = ss + intVal2+"/"+intVal1;
    				}
    			}
    			
    			if(i < num1)
    				ys = (int)(Math.random()*num3+1);
    			else
    				ys = 0;
    			
    			if(ys==0)
    			{
    				ss = ss+"";
    			}
    			if(ys==1){
    				ss = ss +"+";
    			}
    			if(ys==2){
    				ss = ss +"-";
    				}
    			if(ys==3){
    				ss = ss +"*";
    				}
    			if(ys==4){
    				ss = ss +"÷";
    				}	
    		}
    		return ss;
    	}
    %>
    <body> 
    
    <%
    JspWriter mout=pageContext.getOut();
    
    String us = request.getParameter("username");//出题数量
    String ch = request.getParameter("choose");//整数四则运算还是真分数
    String ch1 = request.getParameter("choose1");//几元运算
    String ch2 = request.getParameter("choose2");//范围
    String ch3 = request.getParameter("choose3");//有无乘除 
    String ch4 = request.getParameter("choose4");//有无负数
    String ch5 = request.getParameter("choose5");//显示答案
    String ch6 = request.getParameter("choose6");//有无余数
    int num = Integer.parseInt(us);
    int cho = Integer.parseInt(ch);
    int cho1 = Integer.parseInt(ch1);
    int cho2 = Integer.parseInt(ch2);
    int cho3 = Integer.parseInt(ch3);
    int cho4 = Integer.parseInt(ch4);
    int cho5 = Integer.parseInt(ch5);
    int cho6 = Integer.parseInt(ch6);
    if(cho == 1)//整数题
    {
    	mout.print(num+"道整数题目");
    	mout.print("<br>");
    	String[] str = new String[num+1];
    	double[] st = new double[num+1];
    	double[] s = new double[num+1];
    	str[0]="";
    	String ss = "";
    	if(cho4 == 1)//有负数
    	{
    		if(cho6 == 2)//无余数
    			for(int i=1;i<=num;i++)
    			{
    				int state = 0;
    				while(state == 0)
    				{
    					ss = ztimu(cho1,cho2,cho3);
    					StringCaculate re = new StringCaculate();
    					double result = re.fun1(ss);
    					double r = result-(int)result;
    						
    					for(int j=0;j<i;j++)
    					{
    						if(ss.equals(str[i-1])||r!=0.0)
    						{
    							state = 0;
    						}
    						else
    						{
    							str[i] = ss;
    							st[i] = result;
    							state = 1;
    						}
    					}
    				}
    					
    					mout.print(i+" 、 ");
    					mout.print(str[i]);
    					mout.print("= ?");
    					mout.print("<br>");
    					
    				}
    		if(cho6 == 1)//有余数
    			for(int i=1;i<=num;i++)
    				{
    					int state = 0;
    					while(state == 0)
    					{
    						ss = ztimu(cho1,cho2,cho3);
    						StringCaculate re = new StringCaculate();
    						double result = re.fun1(ss);
    						double r = result-(int)result;
    
    							for(int j=0;j<i;j++)
    							{
    								if(cho1>2)//三元以上无余数
    								{
    
    									if(ss.equals(str[i-1]))
    									{
    										state = 0;
    									}
    									else
    									{
    										str[i] = ss;
    										st[i] = result;
    										state = 1;
    									}
    								}
    								if(cho1<=2)
    								{
    
    									if(ss.equals(str[i-1]))
    									{
    										state = 0;
    									}
    									else
    									{
    										str[i] = ss;
    										st[i] = (int)result;
    										state = 1;
    										if(r==0)
    											s[i]=0;
    										else
    										{
    											Caculate ree = new Caculate();
    											s[i] = ree.fun1(ss);
    										}
    									}
    								}
    							}
    					}
    					
    					mout.print(i+" 、 ");
    					mout.print(str[i]);
    					mout.print("= ?");
    					mout.print("<br>");
    				}
    		}
    		if(cho4 == 2)//无负数
    		{
    			if(cho6 == 2)//有余数
    				for(int i=1;i<=num;i++)
    				{
    					int state = 0;
    					while(state == 0)
    					{
    						ss = ztimu(cho1,cho2,cho3);
    					
    						StringCaculate re = new StringCaculate();
    						double result = re.fun1(ss);
    						double r = result-(int)result;
    						
    							for(int j=0;j<i;j++)
    							{
    								if(ss.equals(str[i-1])||r!=0.0||result<0)
    								{
    									state = 0;
    								}
    								else
    								{
    									str[i] = ss;
    									st[i] = result;
    									state = 1;
    								}
    							}
    					}
    					
    					
    					mout.print(i+" 、 ");
    					mout.print(str[i]);
    					mout.print("= ?");
    					mout.print("<br>");
    					
    				}
    		
    			 if(cho6 == 1)//有余数
    				for(int i=1;i<=num;i++)
    				{
    					int state = 0;
    					while(state == 0)
    					{
    						ss = ztimu(cho1,cho2,cho3);
    						StringCaculate re = new StringCaculate();
    						double result = re.fun1(ss);
    						double r = result-(int)result;
    
    							for(int j=0;j<i;j++)
    							{
    								if(cho1>2)//三元以上无余数
    								{
    
    									if(ss.equals(str[i-1])||result<0)
    									{
    										state = 0;
    									}
    									else
    									{
    										str[i] = ss;
    										st[i] = result;
    										state = 1;
    									}
    								}
    								if(cho1<=2)
    								{
    
    									if(ss.equals(str[i-1])||result<0)
    									{
    										state = 0;
    									}
    									else
    									{
    										str[i] = ss;
    										st[i] = (int)result;
    										state = 1;
    										if(r==0)
    											s[i]=0;
    										else
    										{
    											Caculate ree = new Caculate();
    											s[i] = ree.fun1(ss);
    										}
    									}
    								}
    							}
    					}
    					
    					mout.print(i+" 、 ");
    					mout.print(str[i]);
    					mout.print("= ?");
    					mout.print("<br>");
    				}
    		}
    		if(cho5 == 1)
    		{
    			mout.print("<br>");
    			mout.print("参考答案");
    			mout.print("<br>");
    			for(int m=1;m<=num;m++)
    			{
    				mout.print(m+" 、 "+st[m]);
    				if(s[m] != 0)
    					mout.print("······"+s[m]);
    				mout.print("<br>");
    			}
    		}
    }
    if(cho == 2)
    {
    		mout.print(num+"道真分数题目");
    		mout.print("<br>");
    		String[] st = new String[num+1];
    		st[0]="";
    		String ss = "";
    		for(int i=1;i<=num;i++)
    		{
    			int state = 0;
    			while(state == 0)
    			{
    				ss = ftimu(cho1,cho2,cho3);
    				for(int j=0;j<i;j++)
    				{
    					if(ss.equals(st[i-1]))
    					{
    						state = 0;
    					}
    					else
    					{
    						st[i] = ss;
    						state = 1;
    					}
    				}
    			}
    		
    			mout.print(i+" 、 ");
    			mout.print(st[i]);
    			mout.print("= ?");
    			mout.print("<br>");
    			
    		}
    	}
    
    %>
    </body>
    </html>
    

      (3)建类包代码如下:

    package tianaoweb.com;
    
    
    
    import java.util.HashMap;
    import java.util.Map;
    import java.util.Stack;
    public class Caculate {
    	public static Map pro=new HashMap();
    	public static void init()
    	{
    	pro.put('+', 1);
    	pro.put('-', 1);
    	pro.put('*', 2);
    	pro.put('÷', 2);
    	}
    	public static int getIndex(String str)
    	{
    	int index1=(str.indexOf('+')==-1?str.length():str.indexOf('+'));
    	   int index2=(str.indexOf('-')==-1?str.length():str.indexOf('-'));
    	   int index3=(str.indexOf('*')==-1?str.length():str.indexOf('*'));
    	   int index4=(str.indexOf('÷')==-1?str.length():str.indexOf('÷'));
    	   int index=index1<index2?index1:index2;
    	   index=index<index3?index:index3;
    	   index=index<index4?index:index4;
    	   return index;
    	}
    	public static double cal(char op,double num1,double num2)
    	{
    	switch(op)
    	{
    	  case '+':
    	  return num1+num2;
    	  case '-':
    	  return num1-num2;
    	  case '*':
    	  return num1*num2;
    	  default:
    	      return num1%num2;
    	}
    	}
    	public static double fun1(String str)
    	{
    	init();
    	Stack st1=new Stack();
    	Stack st2=new Stack();
    	int fop=0;
    	while(str.length()>0)
    	{
    	int index=getIndex(str);
    	st1.push(Double.parseDouble(str.substring(0,index)));
    	if(index!=str.length())
    	{
    	char op=str.charAt(index);
    	str=str.substring(index+1);
    	while(true)
    	{
    	if((int)pro.get(op)>fop)
    	{
    	st2.push(op);
    	fop=(int)pro.get(op);
    	break;
    	}
    	else
    	{
    	double num2= (double) st1.pop();
    	double num1=(double) st1.pop();
    	double result=cal((char)st2.pop(),num1,num2);
    	st1.push(result);
    	if(st2.size()==0)
    	{
    	st2.push(op);
    	fop=(int)pro.get(op);
    	break;
    	}
    	char cop=(char) st2.pop();
    	fop=(int)pro.get(cop);
    	st2.push(cop);
    	}
    	}
    	   }
    	else
    	{
    	break;
    	}
    	}
    	while(st2.size()!=0)
    	{
    	double num2=(double) st1.pop();
    	double num1=(double) st1.pop();
    	char op=(char) st2.pop();
    	st1.push(cal(op,num1,num2));
    	}
    	double result=(double) st1.pop();
    	return result;
    	} 
    	public static double fun2(String str)
    	{
    	while(str.indexOf('(')!=-1)
    	{
    	int left=0;
    	int right=str.length();
    	char op;
    	for(int i=0;i<str.length();i++)
    	{
    	if(str.charAt(i)=='(')
    	{
    	left=i;
    	}
    	if(str.charAt(i)==')')
    	{
    	right=i;
    	break;
    	}
    	}
    	str=str.substring(0,left)+fun1(str.substring(left+1,right))+str.substring(right+1);
    	}
    
    	return fun1(str);
    
    }
    	}
    

      

    package tianaoweb.com;
    
    
    
    import java.util.HashMap;
    import java.util.Map;
    import java.util.Stack;
    public class StringCaculate {
    	public static Map pro=new HashMap();
    	public static void init()
    	{
    	pro.put('+', 1);
    	pro.put('-', 1);
    	pro.put('*', 2);
    	pro.put('÷', 2);
    	}
    	public static int getIndex(String str)
    	{
    	int index1=(str.indexOf('+')==-1?str.length():str.indexOf('+'));
    	   int index2=(str.indexOf('-')==-1?str.length():str.indexOf('-'));
    	   int index3=(str.indexOf('*')==-1?str.length():str.indexOf('*'));
    	   int index4=(str.indexOf('÷')==-1?str.length():str.indexOf('÷'));
    	   int index=index1<index2?index1:index2;
    	   index=index<index3?index:index3;
    	   index=index<index4?index:index4;
    	   return index;
    	}
    	public static double cal(char op,double num1,double num2)
    	{
    	switch(op)
    	{
    	  case '+':
    	  return num1+num2;
    	  case '-':
    	  return num1-num2;
    	  case '*':
    	  return num1*num2;
    	  default:
    	      return num1/num2;
    	}
    	}
    	public static double fun1(String str)
    	{
    	init();
    	Stack st1=new Stack();
    	Stack st2=new Stack();
    	int fop=0;
    	while(str.length()>0)
    	{
    	int index=getIndex(str);
    	st1.push(Double.parseDouble(str.substring(0,index)));
    	if(index!=str.length())
    	{
    	char op=str.charAt(index);
    	str=str.substring(index+1);
    	while(true)
    	{
    	if((int)pro.get(op)>fop)
    	{
    	st2.push(op);
    	fop=(int)pro.get(op);
    	break;
    	}
    	else
    	{
    	double num2= (double) st1.pop();
    	double num1=(double) st1.pop();
    	double result=cal((char)st2.pop(),num1,num2);
    	st1.push(result);
    	if(st2.size()==0)
    	{
    	st2.push(op);
    	fop=(int)pro.get(op);
    	break;
    	}
    	char cop=(char) st2.pop();
    	fop=(int)pro.get(cop);
    	st2.push(cop);
    	}
    	}
    	   }
    	else
    	{
    	break;
    	}
    	}
    	while(st2.size()!=0)
    	{
    	double num2=(double) st1.pop();
    	double num1=(double) st1.pop();
    	char op=(char) st2.pop();
    	st1.push(cal(op,num1,num2));
    	}
    	double result=(double) st1.pop();
    	return result;
    	} 
    	public static double fun2(String str)
    	{
    	while(str.indexOf('(')!=-1)
    	{
    	int left=0;
    	int right=str.length();
    	char op;
    	for(int i=0;i<str.length();i++)
    	{
    	if(str.charAt(i)=='(')
    	{
    	left=i;
    	}
    	if(str.charAt(i)==')')
    	{
    	right=i;
    	break;
    	}
    	}
    	str=str.substring(0,left)+fun1(str.substring(left+1,right))+str.substring(right+1);
    	}
    
    	return fun1(str);
    
    }
    	}
    

    ·结果截图:

     

  • 相关阅读:
    JAVA中的BIO,NIO,AIO
    JAVA通过信号量避免死锁
    java死锁
    ConcurrentHashMap并不是完全的线程安全
    【技术学习】Understand Exit Codes of Docker
    【技术学习】centos7 firewall
    【现场问题】Linux Cache过大问题排查
    【技术学习】postgresql学习笔记--基础篇
    【技术学习】postgresql学习笔记--基础篇
    【监控脚本】利用selenium自动化测试样例一
  • 原文地址:https://www.cnblogs.com/wf1647790534/p/6532774.html
Copyright © 2020-2023  润新知