用线性同余法生成随机数序列的公式:r1=(multiplier*r0+increment)%modulus   序列中的每一个数r1,可以由它的前一个数r0计算出来。例如,如果有 :r1=(79253*r0+24897)%65536,可以产生65536个不相同的整型随机数。本实践项目设计一个方法作为随机数生成器,生成一位、两位或三位的随机数。利用这个随机数生成器,编写一个简单算术的练习程序。 

package exam1;
import java.io.*;

public class ExerciseSystem {
    int a=0,b=0;
    int diffcon=0;
    char op='+';
    
    public int rand(int r){
        return(13285*r+24897)%65536;
    }
    
    public int InputIntData()throws IOException{
        byte buf[]=new byte[20];
        String str;
        System.in.read(buf);
        str=new String(buf);
        return Integer.parseInt(str.trim());
    }
    
    private void GetOPDatas(){
        try{
            a=rand(b);
            b=rand(a);
        }catch(Exception e){}
        switch(diffcon){
        case 1:a%=9; b%=9; break;
        case 2:a%=99; b%=99; break;
        case 3:a%=999; b%=999; break;
        }
        if(a<b){
            int t=a;  a=b;  b=t;
        }
    }
    
    private char InputOpr()throws IOException{
        return (char)System.in.read();
    }
    
    public void menul1(){
        do{
            System.out.println("  选择难度:");
            System.out.println("   一位数运算------------1:");
            System.out.println("   两位数运算------------2:");
            System.out.println("   三位数运算------------3:");
            System.out.println("   不做了,退出-----------0:");
            try{
                diffcon=InputIntData();
            }catch(IOException e){
                System.out.println("输入难度错误,系统退出!");
            }
        }while(diffcon!=0&&diffcon!=1&&diffcon!=2&&diffcon!=3);
    }

   public void selectOpr()throws IOException{
    do{
        System.out.println("  选择运算符并给出答案");
        System.out.println("    加法---------+");
        System.out.println("    减法---------——");
        System.out.println("    乘法---------*");
        System.out.println("    除法---------/");
        try{
            op=InputOpr();
        }catch(IOException e){
            System.out.println("输入运算符错误");
        }
    }while(op!='+'&&op!='-'&&op!='*'&&op!='/');
    return;
   }
   
   public int calculate(){
       switch(op){
        case'+':return a+b;
        case'-':return a-b;
        case'*':return a*b;
        case'/':
            if(b!=0)  return a/b;
            else{
                b=1;
                System.out.println(a+"/"+b+"="+a);
                return a;
            }
        default:return -2;
       }
   }
   
   public static void main(String args[])throws IOException{
       ExerciseSystem es=new ExerciseSystem();
       int answer=0;
       int right=0,error=0,total=-1;
       while(true){
           total++;
           es.menul1();
           es.GetOPDatas();
           if(es.diffcon==0){
               System.out.println("共做"+total+"道题!");
               System.out.println("做对"+right+"道题!");
               System.out.println("做错"+error+"道题!");
               System.out.println("分数"+(100.0*right/total));
               return;
           }
           System.out.println("两个操作数为:"+es.a+"\t"+es.b);
           try{
               es.selectOpr();
           }catch(IOException e){}
           try{
               answer=es.InputIntData();
           }catch(IOException e){
               System.out.println("数据输入错误!!");
           }catch(java.lang.NumberFormatException e){
               System.out.println("输入的数据格式错误!!!");
           }
           System.out.println(""+es.a+(char)es.op+es.b+"="+answer);
           if(answer==es.calculate()){
               right++;
               switch(right%5){
               case 0:System.out.println("恭喜你做对了!");  break;
               case 1:System.out.println("太好了,就这样做!");  break;
               case 2:System.out.println("你真棒!做对了!");  break;
               case 3:System.out.println("你做的很好,又对了!");  break;
               case 4:System.out.println("Right!^-^");  break;
               }
               continue;
           }
           else{
               error++;
               switch(error%3){
               case 0:System.out.println("仔细想想!");   break;
               case 1:System.out.println("不要马虎!");   break;
               case 2:System.out.println("加油!总会成功的!");   break;
               }
           }
           while(answer!=es.calculate()){
               System.out.println("计算错误。重做!");
               System.out.println(""+es.a+(char)es.op+es.b+"=");
           }try{
               answer=es.InputIntData();
           }catch(IOException e){}
       }
       
   }
}