java四则运算3

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@page import = "java.util.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>变量及基础方法</title>
</head>
<body>
<%!
class RandomFormula {
int numberTotal;
int formulaTotal;
int numberRange;
boolean includeMulAndDiv;
boolean includeNegNum;
RandomFormula() {
this.numberTotal = 2;
this.formulaTotal = 30;
this.numberRange = 100;
this.includeMulAndDiv = false;
this.includeNegNum = false;
}
RandomFormula(int numberTotal, int formulaTotal, int numberRange, boolean includeMulAndDiv,
boolean includeNegNum) {
this.numberTotal = numberTotal;
this.formulaTotal = formulaTotal;
this.numberRange = numberRange;
this.includeMulAndDiv = includeMulAndDiv;
this.includeNegNum = includeNegNum;
}
int getRandomNumber() {
Random rand = new Random();
if (this.includeNegNum) {
return (rand.nextInt(this.numberRange) + 1) * (rand.nextDouble() > 0.5 ? 1 : -1);
} else {
return rand.nextInt(this.numberRange) + 1;
}
}
String getRandomOperator() {
Random rand = new Random();
String[] operations = { "+", "-", "*", "/" };
return operations[rand.nextInt((this.includeMulAndDiv == true) ? 4 : 2)];
}

String generateFormula() {
String formula = "";
for (int i = 0; i < this.numberTotal; i++) {
if (i >= this.numberTotal - 1) {
formula += random_kuohao(this.getRandomNumber())+")";
continue;
}
formula +="("+ random_kuohao(this.getRandomNumber()) + " " + this.getRandomOperator() + " ";
}
return formula;
}

List<String> getFormulas() {
List<String> set = new ArrayList<String>();
set.add(this.generateFormula());
String str="/";
while (set.size() <= this.formulaTotal){
for(int i=0;i<set.size();i++)
{
String formula=this.generateFormula();
if(str.equals(formula))
if(this.getAnswer(formula)%1!=0)
continue;

if(!formula.equalsIgnoreCase(set.get(i)))
{
set.add(formula);
break;
}
}

}
return set;
}
String random_kuohao(int num) {

if (this.getRandomNumber()%2==0) {
return "(" + num ;
}
return +num+")" ;
}


int getAnswer(String formula) {
int length = 0;
String[] formulaArr = formula.split(" ");
String operators = "+-*/";
Stack<Integer> opNumbers = new Stack<Integer>();
Stack<String> opOperators = new Stack<String>();
opOperators.add("#");
while (length < formulaArr.length) {
String op = formulaArr[length++];
if (operators.indexOf(op) > -1) {
String sign = opOperators.peek();
int priority = compare(op, sign);
if (priority >= 0) {
opNumbers.add(compute(opOperators, opNumbers));
opOperators.add(op);
} else {
opOperators.add(op);
}
continue;
}
opNumbers.add(Integer.parseInt(op.replace("(", "").replace(")", "")));
}
while (opOperators.peek() != "#") {
opNumbers.add(compute(opOperators, opNumbers));
}
return opNumbers.pop();
}
int compare(String operator1, String operator2) {
int res = 0;
switch (operator1) {
case "+":
case "-":
if (operator2.equals("+") || operator2.equals("-") || operator2.equals("*") || operator2.equals("/")) {
res = 1;
} else {
res = -1;
}
break;
case "*":
case "/":
if (operator2.equals("*") || operator2.equals("/")) {
res = 1;
} else {
res = -1;
}
break;
}
return res;
}
int compute(Stack<String> opOperators, Stack<Integer> opNumbers) {
int num2 = opNumbers.pop();
int num1 = opNumbers.pop();
String _op = opOperators.pop();
int result = 0;
switch (_op) {
case "+":
result = num1 + num2;
break;
case "-":
result = num1 - num2;
break;
case "*":
result = num1 * num2;
break;
case "/":
result = num1 / num2;
break;
}
return result;
}
int[] getAnswers(List<String> set) {
int[] arr = new int[set.size()];
int i = 0;
for (String str : set) {
arr[i++] = getAnswer(str);
}
return arr;
}
List<Integer> getAnswer0sList(List<String> set) {
List<Integer> arr = new ArrayList<Integer>();
for (String str : set) {
arr.add( getAnswer(str));
}
return arr;
}


}

%>
</body>
</html>

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!-- <%@include file="./variable.jsp" %> -->
<%@include file="./formula.jsp" %>
<%@page import="javax.servlet.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>四则运算初始选择界面</title>
</head>
<body>
<p>
<font size="4">请输入你的选择:<br></font>
<font size="2"><input type="checkbox" name="one" value="1"></font> <font size="3">1.自定义<br></font>
<font size="2"><input type="checkbox" name="two" value="2"></font> <font size="2">2.二年级程度<br></font>
<font size="2"><input type="checkbox" name="three" value="3"></font> <font size="2">3.三年级程度<br></font>
<font size="2"><input type="checkbox" name="four" value="4"></font> <font size="2">4.四年级程度<br></font>
</p>
<form action="" method="get" name="form" id="form">
<font size="2"><input type="number" name="choice" min="1" max="4" value=NULL>
<input type="submit" value="确定" name="submit"></font>
</form>
<%
String str = request.getParameter("choice");
int r;
if(str != null)
r = Integer.parseInt(str);
else
r = 1;
switch(r)
{
case 1 :{
formula A=new formula();
out.println("请输入 运算操作数 运算式数量 数值范围 /*是否包含乘除 是否包含负数*/ <-(input true or false)");
//A.runing(in.nextInt(), in.nextInt(), in.nextInt(), in.nextBoolean(), in.nextBoolean());
break;
}
case 2 :{

break;
}
case 3 :{

break;
}
case 4 :{

break;
}
}
%>

%>
</html>

原文地址:https://www.cnblogs.com/L-L-ALICE/p/14158461.html