标签:
package java日常训练; import java.util.Random; import java.util.Scanner; public class Practice { public static void main(String[] args) { // TODO 自动生成的方法存根 //控制题目的数量 int m,m1,m2,m3,m4,m5,s=0,k=0; System.out.print("请输入题目的数量:"); Scanner sc = new Scanner(System.in); m=sc.nextInt(); System.out.print("请输入数值范围(最小数):"); Scanner min = new Scanner(System.in); m1=sc.nextInt(); System.out.print("请输入数值范围(最大数):"); Scanner max = new Scanner(System.in); m2=sc.nextInt(); if(m1>=m2) { System.out.print("输入错误!"); System.exit(0);//退出整个程序 } System.out.print("是否有负数( 是1或者否2):"); //判断是否有负数 Scanner fs = new Scanner(System.in); m5=sc.nextInt(); if(m5==2){ if(m1>=m2||m1<0||m2<0) { System.out.print("输入错误!"); System.exit(0);//退出整个程序 } } Random r1 = new Random(10); Random r2 = new Random(20); Random r3 = new Random(30); Random r4 = new Random(40); Random r5 = new Random(50); System.out.print("是否有乘除法( 是1或者否2):"); Scanner yn = new Scanner(System.in); m3=sc.nextInt(); System.out.print("除法有无余数(有1 无2):"); //控制是否有余数 Scanner 余数 = new Scanner(System.in); m4=sc.nextInt(); for(int i = 0;i < m;i++){ int c = r3.nextInt(120); if(m3==2){ k=c%2; } //控制是否有乘除法 else k=c%4; int a = r1.nextInt(m2-m1+1)+m1; int b = r2.nextInt(m2-m1+1)+m1; switch(k){ case 0: System.out.println(a+"+"+b+"=");break; case 1: if(m5==2){ if(a>b){ System.out.println(a+"-"+b+"=");break; } else System.out.println(b+"-"+a+"=");break; } else System.out.println(a+"-"+b+"=");break; case 2: System.out.println(a+"*"+b+"=");break; case 3: if(m4==2){ if(a%b==0){ System.out.println(a+"/"+b+"=");break; } else label: for(int q=1;q<10000000;q++) //为了保证题目中有一定数量的除法,则一直到生成一个有效的除法为止。 { int f = r4.nextInt(m2-m1+1)+m1; int d = r5.nextInt(m2-m1+1)+m1; if(f%d==0){ System.out.println(f+"/"+d+"="); break label; } } } else System.out.println(a+"/"+b+"=");break; } } } }
设计思路:
首先,用一个语句用来定制数量和打印方式。
然后,再控制参数,是否有乘除法(让用户选择,如果是,则把乘除法加入,如果不是,则删除乘除法),数值范围(random控制),加减有无负数(1.random取值不取负数,2,如果是除法,则加一个控制条件第一个数大于第二个数),除法有无余数(用%来控制,如果没有余数,则加一个条件,如果运算符为除法,a%b=0),是否支持分数(单独添加输出函数,判断分数的输出)。
应该判断题目是否重复。用for循环来控制,如果第一个数重复,则检查第二个数,如果第二个数也重复,则检查运算符号,若都重复,则删除这一道题,另出一道题。如果在这三道控制中有一个不满足,则break退出。
结果截图:
编程感想:在处理加减有无负数的时候,如果减法中出现了负数,则让相减的两个数换位置,这样更简便一些。
没有把真分数和避免重复加入到程序中,以后会补上。
程序中变量太多太麻烦。应该再简洁一些。没有应用数组。
起初的程序用了太多的for循环,导致程序过于繁杂,后经过改正,只用了一个for循环。
时间记录表
时间 | 用时 | |
3.14 | 2h | 题目的数量和数值范围 |
3.15 | 2h | 是否有负数,是否有乘法 |
3.16 | 1h | 乘法是否有余数 |
3.17 | 1h | 发现程序过于繁杂 |
3.18 | 2h | 重新组合,改进 |
3.19 | 1h | 发现除法太少,进行改进保证除法的数量 |
标签:
原文地址:http://www.cnblogs.com/twentytwo/p/4350970.html