小学生题目

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 发现除法太少,进行改进保证除法的数量
posted @ 2015-03-19 17:03  twenty丶two  阅读(123)  评论(0编辑  收藏  举报