zoukankan      html  css  js  c++  java
  • 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>

  • 相关阅读:
    [51NOD]大数加法(模拟)
    LCS记录路径
    BISTU-(1)-4-17-2016
    [CF580B]Kefa and Company(滑动窗口)
    [CF660C]Hard Process(尺取法)
    [POJ3061]Subsequence(二分,前缀和)
    [HDOJ2602]Bone Collector(01背包)
    [HDOJ1171]Big Event in HDU(01背包)
    [HDOJ2512]一卡通大冒险(DP)
    hdu 1269 迷宫城堡 最简单的联通图题 kosaraju缩点算法
  • 原文地址:https://www.cnblogs.com/L-L-ALICE/p/14158461.html
Copyright © 2011-2022 走看看