四则运算(3)

程序要求: 可以控制下列参数: 是否有乘除法; 是否有括号(最多可以支持十个数参与计算); 数值范围; 加减有无负数; 除法有无余数!

程序一次运行生成的题目不能重复,即任何两道题目不能通过有限次交换+和×左右的算术表达式变换为同一道题目。

设计思路:将产生的int类型随机数在方法中通过随机的方法确定这个数据是否为分数,对真分数进行判断。

判断是否重复时,将生成的算式保存在一个数组中,输出之前进行验证,判断是否存在并进行输出。

源代码: 

package demo;
import java.*;
import java.util.*;

public class Main {
public static void main(String args[])
{
Scanner scan;
scan = new Scanner(System.in);
int flag;
int max;
int ysf;
int num;
int i = 0;
char[] ch = new char[4];
ch[0] = '+';
ch[1] = '-';
ch[2] = '*';
ch[3] = '/';


public String putong(){
char [] a=new char[4];
a[0]='+';
a[1]='-';
a[2]='*';
a[3]='/';
int num1=(int)(Math.random()*10+1);
int num2=(int)(Math.random()*10+1);
int num=(int)(Math.random()*4+0);
String s=num1+" "+a[num]+" "+num2;
return s;
}
%>
<%!
public String zhenfenshu(){
char [] a=new char[4];String m,n="";
a[0]='+';
a[1]='-';
a[2]='*';
a[3]='/';
int num1=(int)(Math.random()*10+1);
int num2=(int)(Math.random()*10+1);
for(;num1==num2;num1=(int)(Math.random()*10+1),num2=(int)(Math.random()*10+1)){}
if(num1<num2){
m=num1+"/"+num2;
}
else
m=num2+"/"+num1;

for(num1=(int)(Math.random()*10+1),num2=(int)(Math.random()*10+1);num1==num2;num1=(int)(Math.random()*10+1),num2=(int)(Math.random()*10+1)){}

if(num1<num2){
n=num1+"/"+num2;
}
else
n=num2+"/"+num1;

int num=(int)(Math.random()*4+0);
String s=m+" "+a[num]+" "+n;

return s;
}

for(int j = 0;i < num;i ++)
{
flagA = SuiJileixing();
flagB = SuiJileixing();
if(flagA == 1 && flagB == 0)
{
a = SuiJi1();
b = SuiJi1();
b1 = SuiJi1() + 1;
if(b < b1)
{
b = b;
}
else
{
b1 = b1 + b;
}
ysf = SuiJiyunsuanfu();
s = a + " " + ch[ysf] + " (" + b + "/" + b1 + ") = ";
if(Check(str,s,i) != 1)
{
str[i] = s;
System.out.print(str[i]);
A = (double)a;
B = (double)b;
B1 = (double)b1;
show(A,B/B1,ysf);
i ++;
}
}

String type = (String)request.getParameter("type");
int chutishu=Integer.parseInt(request.getParameter("chutishu"));
int j=0;
String []a=new String [chutishu];

for(j=0;j<chutishu;j++){
if(type.equals("zhengshu"))
a[j]=putong();
else if(type.equals("zhenfenshu"))
a[j]=zhenfenshu();
else if(type.equals("douyou")){
int m=(int)(Math.random()*2+1);
if(m==1)
a[j]=putong();
else if(m==2)
a[j]=zhenfenshu();
}

for(int k=0;k<j;k++){
if(a[k].equals(a[j]))
{j--;break;}
else
continue;
}

public static void show(double a,double b,int k)
{
double c ;
if(k == 0)
{
c = a + b;
System.out.println((int)c);
}
if(k == 1)
{
c = (int) (a - b);
System.out.println((int)c);
}
if(k == 2)
{
c = (int) (a * b);
System.out.println((int)c);
}
if(k == 3)
{
c = (int) (a / b);
System.out.println((int)c);
}
}


}


程序截图:

 总结:通过这次作业 我充分的意识到如何将一个复杂的程序分解进行解决。在编写的时候一定要注意使用单元测试的思想,不能急于求成,这次作业未能完成检验重复的功能,会在以后逐步完善并发布。

原文地址:https://www.cnblogs.com/ylx111/p/6567835.html