四则运算(三)
程序设计思想:
用分数类存储所有的数据,当用户的需求为整数运算时,将所有随机产生的数的分母全部默认为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>