四则运算(三)

程序设计思想:

用分数类存储所有的数据,当用户的需求为整数运算时,将所有随机产生的数的分母全部默认为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>
原文地址:https://www.cnblogs.com/guo-xu/p/7994194.html