加减程序2
一、设计思想
这次代码主要是在加减乘除1的基础上实现括号的添加、除法是否有余、加减出现负数、有无乘除法等要求,在括号上实现一对括号的随意位置添加,实现时随机查找位置(至少满足括号内有两个运算数),加减负数是运算数可能出现负数的情况,如果出现不符合的情况,重新调用创建函数生成新的随机数(随机的式子),最后输出的时候,因为情况比较多,将show函数带上参数来反应是否有负数,是否有括号的问题,分别写出对应的输出语句加以输出,最后在main函数中调用即可,最后还可以完成添加出的结果以及匹配用户输入的值是否正确。
二、程序代码
import java.util.Scanner;public class test { public static void main(String[] args) { Scanner scanner=new Scanner(System.in); System.out.print("请输入要生成的随机数个数:"); int num=scanner.nextInt(),i; Shi[] shi=new Shi[num]; System.out.print("请输入参与数的个数:"); int n=scanner.nextInt(); System.out.print("请选择是否有乘除(0有 1没有):"); int cc=scanner.nextInt(); int cy=2; int jf=0; if(cc==1) { System.out.print("请选择有无负数(0有 1没有):"); jf=scanner.nextInt(); } System.out.print("请选择是否有括号(0有 1没有):"); int kh=scanner.nextInt();// System.out.print("请输入参与数的个数:");// int n=scanner.nextInt(); System.out.print(String.format("%-6s","序号")); System.out.println(String.format("%-6s","算式")); for(i=0;i<num;i++) { shi[i]=new Shi(n); shi[i].chuangjian(cc,jf,kh); chachong(i,shi,cc,jf,cy,kh); System.out.print(String.format("%-6s",i+1)); shi[i].shuchu(kh); } } static void chachong(int n,Shi[] x,int cc,int jf,int cy,int kh) { int i; for(i=0;i<n;i++) { if(x[n].equals(x[i])) { x[n].chuangjian(cc,jf,kh); chachong(n,x,cc,jf,cy,kh); break; } } }}class Shi{ Fenshu a[]; int b[]; int n; int m1,m2;//括号位置 Shi() { } Shi(int n) { this.n=n; a=new Fenshu[n]; for(int i=0;i<n;i++) { a[i]=new Fenshu(); } b=new int[n-1]; } void chuangjian(int cc,int jf,int kh) { a[0].chuangjian(); for(int i=1;i<n;i++) { if(cc==0) { b[i-1]=(int)(Math.random()*4); a[i].chuangjian(); while(b[i-1]==3&&a[i].zi==0) { a[i].chuangjian(); } } else if(cc==1) { b[i-1]=(int)(Math.random()*2); a[i].chuangjian(); if(jf==0) { int k=(int)(Math.random()*2); if(k==1) a[i].zi*=(-1); } } } if(kh==0) { m1=(int)(Math.random()*(n-1)); m2=(int)(Math.random()*(n-1)+1); while(m2<m1+1) { m2=(int)(Math.random()*(n-1)+1); } } } void shuchu(int kh) { if(kh==1) { String output=""; for(int i=0;i<n-1;i++) { output+=(a[i].output()+fuhao(b[i])); } output+=(a[n-1].output()+"="); System.out.println(String.format("%-20s",output)); } else if(kh==0) { String output=""; int i; for(i=0;i<n-1;i++) { if(i==m1) output+="("; output+=(a[i].output()); if(i==m2) output+=")"; output+=fuhao(b[i]); } if(i==m2) output+=(a[n-1].output()+")="); else output+=(a[n-1].output()+"="); System.out.println(String.format("%-20s",output)); } } String fuhao(int a) { String fuhao=""; if(a==0) fuhao="+"; if(a==1) fuhao="-"; if(a==2) fuhao="*"; if(a==3) fuhao="÷"; return fuhao; } boolean equals(Shi y) { boolean flag=true; for(int i=0;i<n;i++) { if(!a[i].equals(y.a[i])) { flag=false; break; } } for(int i=0;i<n-1;i++) { if(!(b[i]==y.b[i])) { flag=false; break; } } if(!(m1==y.m1&&m2==y.m2)) flag=false; return flag; }}class Fenshu{ int zi,mu; Fenshu() { } boolean equals(Fenshu x) { if(zi*x.mu==mu*x.zi) return true; return false; } void chuangjian() { zi=(int)(Math.random()*100); mu=(int)(Math.random()*100+1); while(zi>mu&&zi%mu!=0) { zi=(int)(Math.random()*100); mu=(int)(Math.random()*100+1); } if(zi!=0) { int gongyue=gongyue(zi,mu); zi=zi/gongyue; mu=mu/gongyue; } } int gongyue(int x,int y) { int k,i; k=x<y?x:y; for(i=k;i>=1;i--) { if(x%i==0&&y%i==0) break; } return i; } String output() { String out=""; if(zi==0) out+=zi; else if(mu==1) { if(zi<0) out="("+zi+")"; else out+=zi; } else out="("+zi+"/"+mu+")"; return out; }}
三、程序截图: