• 四则运算(三)


    程序设计思想:

    用分数类存储所有的数据,当用户的需求为整数运算时,将所有随机产生的数的分母全部默认为1,然后将生成的表达式传递到算结果的函数中,经过运算化简等得到最简分数。

    程序源代码:

    IFraction.java

    package com.jaovo.msg.model;
    
    public interface IFraction 
    {
        public String getresult(String str);
        public String GCD(int numerator,int denominator);
        public String show();
        public String showright(int countright, int number);
    }

    Fraction.java

    package com.jaovo.msg.model;
    
    public class Fraction 
    {
        private int numerator;
        private int denominator;
        public int getDenominator() {
            return denominator;
        }
        public void setDenominator(int denominator) {
            this.denominator = denominator;
        }
        public int getNumerator() {
            return numerator;
        }
        public void setNumerator(int numerator) {
            this.numerator = numerator;
        }
    }

    FractionImpl.java

    package com.jaovo.msg.model;
    
    public class FractionImpl implements IFraction
    {
        @Override
        public String getresult(String str) 
        {
            String num[] = str.split(" ");
            if(num[0].length() == 1)
            {
                if(num[0].equals("0"))
                {
                    num[0] = "0/1";
                }
                else
                {
                    num[0] = Integer.parseInt(num[0])+"/1";
                }
            }
            if(num[2].length() == 1)
            {
                if(num[2].equals("0"))
                {
                    num[2] = "0/1";
                }
                else
                {
                    num[2] = Integer.parseInt(num[2])+"/1";
                }
            }
            String num1[] = num[0].split("/");
            String num2[] = num[2].split("/");
            String result = "";
            int leftfz = Integer.parseInt(num1[0]),leftfm = Integer.parseInt(num1[1]);
            int rightfz = Integer.parseInt(num2[0]),rightfm = Integer.parseInt(num2[1]);
            int resultfz = 0,resultfm = 0;
            if(num[1].equals("+"))
            {
                resultfz = (leftfz*rightfm)+(leftfm*rightfz);
                resultfm = leftfm*rightfm;
                result = GCD(resultfz, resultfm);
            }
            else if(num[1].equals("-"))
            {
                resultfz = (leftfz*rightfm)-(leftfm*rightfz);
                resultfm = leftfm*rightfm;
                result = GCD(resultfz, resultfm);
            }
            else if(num[1].equals("*"))
            {
                resultfz = leftfz*rightfz;
                resultfm = leftfm*rightfm;
                result = GCD(resultfz, resultfm);
            }
            else
            {
                if(rightfz == 0)
                {
                    rightfz = (int)(Math.random()*20+1);
                }
                resultfz = leftfz*rightfm;
                resultfm = leftfm*rightfz;
                result = GCD(resultfz, resultfm);
            }
            return result;
        }
        @Override
        public String GCD(int numerator , int denominator)
        {
            if(numerator == 0)
            {
                return "0";
            }
            if(numerator%denominator==0)
            {
                return Integer.toString(numerator/denominator);
            }
            int one = Math.abs(numerator);
            int two = Math.abs(denominator);
            int min = one>two?two:one;
            int gcd = 1;
            for(int i = min;i>1;i--)
            {
                if((one%i == 0)&&(two%i == 0))
                {
                    gcd = i;
                    break;
                }
            }
            String GCD = Integer.toString(one/gcd)+"/"+Integer.toString(two/gcd);
            if((numerator>0&&denominator<0)||(numerator<0&&denominator>0))
            {
                return ("-"+GCD);
            }
            return GCD;
        }
        @Override
        public String showright(int countright, int number) 
        {
            System.out.println("共答对了"+countright+"道题");
            if(countright >= (int)(number*0.9))
            {
                return ("你真棒!");
            }
            else if(countright >= (int)(number*0.8))
            {
                return ("挺好的!");
            }
            else if(countright >= (int)(number*0.6))
            {
                return ("还可以!");
            }
            else
            {
                return ("再接再厉!");
            }
        }
        @Override
        public String show()
        {
            Fraction f1 = new Fraction();
            Fraction f2 = new Fraction();
            f1.setNumerator((int)(Math.random()*21));
            f1.setDenominator((int)(Math.random()*20+1));
            f2.setNumerator((int)(Math.random()*21));
            f2.setDenominator((int)(Math.random()*20+1));
            if(f1.getNumerator()>f1.getDenominator()||f2.getNumerator()>f2.getDenominator())
            {
                return null;
            }
            int operation = (int)(Math.random()*4);
            if(operation == 0)
            {
                return(GCD(f1.getNumerator(),f1.getDenominator())+" + "+GCD(f2.getNumerator(), f2.getDenominator())+" = ");
            }
            else if(operation == 1)
            {
                return(GCD(f1.getNumerator(),f1.getDenominator())+" - "+GCD(f2.getNumerator(), f2.getDenominator())+" = ");
            }
            else if(operation == 2)
            {
                return(GCD(f1.getNumerator(),f1.getDenominator())+" * "+GCD(f2.getNumerator(), f2.getDenominator())+" = ");
            }
            else
            {
                if(f2.getNumerator() == 0)
                {
                    f2.setNumerator((int)(Math.random()*20+1));
                }
                return(GCD(f1.getNumerator(),f1.getDenominator())+" ÷ "+GCD(f2.getNumerator(), f2.getDenominator())+" = ");
            }
        }
    }

    Index.jsp

    <%@ 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=UTF-8">
    <title>四则运算</title>
    </head>
    <body>
        <div align="center">
            <form action="math.jsp" method="get">
                请选择题目类型: <input type="radio" name="select" value="整数运算" />整数运算 <input
                    type="radio" name="select" value="真分数运算" />真分数运算 <br>
                请选择题目数量(1~60): <select name="number">
    
                    <%
                    for(int i = 1;i<=60;i++)
                    {
                        if(i == 30)
                        {
                %>
                    <option value="500000" selected>500000
                        <%
                            continue;
                        }
                %>
                    
                    <option value=<%=Integer.toString(i) %>><%= Integer.toString(i)%>
                        <%
                    }
                %>
                    
                </select> <br> <input type="submit" value="开始" />
            </form>
        </div>
    </body>
    </html>

    judge.jsp

    <%@page import="com.jaovo.msg.model.FractionImpl"%>
    <%@ 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>
    <%
        FractionImpl fractionImpl = new FractionImpl();
        String result[] = request.getParameterValues("result");
        String str = (String)session.getAttribute("right");
        String[] right = str.split(" ");
        int countright = 0;
        for(int i = 0;i<right.length;i++)
        {
            if(right[i].equals(result[i]))
            {
                out.println(""+(i+1)+"题回答正确!");
                countright++;
            }
            else
            {
                out.println(""+(i+1)+"题回答错误!正确答案为:"+right[i]);
            }
    %>
            <br>
    <%
        }
    %>
        <%="共答对了"+countright+"道题"%>
        <%=fractionImpl.showright(countright, right.length)%>
    </html>

    math.jsp

    <%@page import="com.jaovo.msg.model.FractionImpl"%>
    <%@ 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>
    <title><%=request.getParameter("select") %></title>
    <style type="text/css">
    input{
        width: 60px;
        padding: 5px;
        border:none;
        font-size:20px;
        border-bottom: solid greenyellow 5px;
        text-align:center;
    }
    </style>
    </head>
    <body>
        <%
            long number = Integer.parseInt(request.getParameter("number"));
            FractionImpl fractionImpl = new FractionImpl();
        %>
        <form action = "judge.jsp" method = "get">
        <table cellpadding = "10" border = "0"align = "center">
        <%
            String st = ""; 
            for(int i = 0;i<number/2;i++)
            {
    
                String str = fractionImpl.show();
                String str1 = fractionImpl.show();
                if(str == null||str1==null)
                {
                    i--;
                    continue;
                }
                st += fractionImpl.getresult(str) + " " + fractionImpl.getresult(str1) + " ";
        %>
            <tr>
                <td><%=str %></td>
                <td><input type = "text" name = "result"/></td>
                <td width = "40"></td>
                <td><%=str1 %></td>
                <td><input type = "text" name = "result"/></td>
            </tr>
        <%
            }
            if(number%2!=0)
            {
        %>
            <tr>
                <td>
                    <%
                        String s = fractionImpl.show();
                        while(s==null)
                        {
                            s = fractionImpl.show();
                        }
                        st += fractionImpl.getresult(s);
                    %>
                    <%=s %>
                </td>
                <td><input type = "text" name = "result"/></td>
            </tr>
            <%
            }
            session.setAttribute("right", st);
            %>
        </table>
        <div align = "center">
            <input type = "submit" value = "提交" />
        </div>
        </form>
    </body>
    </html>
  • 相关阅读:
    router-link中传值的三种方式
    JVM原理和优化
    JAVA中关于锁机制
    思考程序
    论防御式编程与攻击式编程
    BOM详解
    理解JAVASCRIPT 闭包
    用HTML5 CANVAS做自定义路径的动态效果图片!
    js制作点击会自动隐藏的导航栏(固定在在头部的)
    ++a和a++的区别。
  • 原文地址:https://www.cnblogs.com/guo-xu/p/7994194.html
Copyright © 2020-2023  润新知