• 给二柱子做算术本---升级版


    经过修改,二柱子的算术本已经不出错了

    package sizeyunsuan2;
    
    import java.util.*;
    import java.util.Random;
    
    public class si_ze_yun_suan2 {
    
    	char fu_hao[]={'+','-','*','/'};
    	int a[]=new int[15];                //暂时存放新生成的式子
    	String[][] ti_mu=new String[3][1000];   //存放运算完之后的式子
    	int da_an[][]=new int[3][1000];
    	int cao_zuo_ge_shu,kuo_hao=0;
        int cheng_chu=2,num=30,fan_wei=100;
        String[][] cuo_ti=new String[3][1000];       //用于存放错题
        int[][] cuo_da_an=new int[3][1000];
        int[] cuo_num={0,0,0};          //用于存放错题数目
        int[] temp={0,0,0};
        int kuo_wei_zhi;
        
    // **************************************主函数
        public static void main(String args[])
        {
            enum1();
        }
        
     //**************************************
        
        public static void enum1()
        {
        	int choose=1;
        	si_ze_yun_suan2 c= new si_ze_yun_suan2();
        	while(choose==1){
        		System.out.println("**************");
        		System.out.println("1.参数设置");
        		System.out.println("2.小学二年级口算题");
        		System.out.println("3.小学三年级口算题");
        		System.out.println("4.小学四年级口算题");
        		System.out.println("5.错题集");
        		System.out.println("6.退出");
        		System.out.println("**************");
        		
        		Scanner input = new Scanner(System.in);
        		int x = input.nextInt();
        		
        		switch(x){
        		case 1:c.can_shu(); break;
        		
        		case 2:c.magic(2,0,2,x-2);       //magic(czgs1,kuo_hao,cheng_chu,classes)
        			    break;
        			   
        		case 3:c.magic(4,0,2,x-2);
        				break;
        				
        		case 4:c.magic(4,1,4,x-2);
        				break;
        				
        		case 5:c.cuo_ti_ji();
        				break;
        				
        		case 6:choose=0;
        		       System.out.println("再见!");
        		        break;
        		        
        		default:System.out.println("错误数字!");break;
        		
        		}
        	}
    
        }
        
      //**************************************
      	void can_shu()
      	{
      	    Scanner input=new Scanner(System.in);
      	    System.out.println("出题数? ");
      	    num=input.nextInt();
    
      	    System.out.println("操作数数值范围?");
      	    fan_wei=input.nextInt();
      	}
      	
      //************************************
    	
    	void cuo_ti(int classes)
    	{
    		if(cuo_num[classes]==0){
    			System.out.println("无错题");
    		}
    		else{
    			System.out.print("
    *****错题*****
    ");
    			for(int i=0;i<cuo_num[classes];i++)
    			{
    				System.out.print((i+1));
    				System.out.print(".");
    	    		System.out.print(cuo_ti[classes][i]);
    	    		System.out.print(cuo_da_an[classes][i]);
    	    		System.out.println();
    			}
    			System.out.println("正确率:"+(double)(temp[classes]*num-cuo_num[classes])*100/(temp[classes]*num)+"%");
    		 }
    	}
    	
    	//*******************************5.错题集
    	
    	void cuo_ti_ji()
    	{
    		System.out.println("几年级?");
    		Scanner input=new Scanner(System.in);
    		int x=input.nextInt();
    		if(x>=2&&x<=4) cuo_ti(x-2);
    		else {System.out.print("错误数字!"); cuo_ti_ji();}
    	}
    	
    
    	//*************************************
    	
    	int zuoti(int classes,int i)
    	{
    	    int daan1;
    	    Scanner input=new Scanner(System.in);
    	    daan1=input.nextInt();
    	    if(daan1==da_an[classes][i])
    	    {
    	    	System.out.print("*****正确*****
    ");
    	        return 1;
    	    }
    	    else
    	    {
    	    	System.out.print("*****错误*****
    ");
    	        cuo_ti[classes][cuo_num[classes]]=ti_mu[classes][i];
    	        cuo_da_an[classes][cuo_num[classes]]=da_an[classes][i];
    	        cuo_num[classes]++;
    	        return 0;
    	    }
    	}
    	
    //***********************************
    	int yun_suan(int kh,int kuo_wei_zhi)
    	{
    	    int daan=0,w=0;
    	    
    	     if(kh==1) 
    	     {
    	    	int k=kuo_wei_zhi+1;
    	    	switch(a[k]%cheng_chu){
    	    	case 0:a[k-1]+=a[k+1];
    	    		   break;
    	    	case 1:a[k-1]-=a[k+1];
    	    		   break;
        		case 2: a[k-1]=a[k-1]*a[k+1]; 
        			    break;
        		case 3: a[k-1]=a[k-1]/a[k+1]; 
        			    break;
        	    }
    	    	for(int j=k;j<cao_zuo_ge_shu*2+2;j++) a[j]=a[j+2];
    	     }
    	     
    	    for(int k=1;k<(cao_zuo_ge_shu)*2-2;k+=2)
    	    {
    	    	switch(a[k]%cheng_chu){
    	    		case 2: 
    	    			a[k-1]=a[k-1]*a[k+1]; 
    	    			for(int j=k;j<cao_zuo_ge_shu*2+2;j++) a[j]=a[j+2];
    	    			k-=2;
    	    			break;
    	    		case 3: 
    	    			a[k-1]=a[k-1]/a[k+1]; 
    	    			for(int j=k;j<cao_zuo_ge_shu*2+2;j++) a[j]=a[j+2];
    	    			k-=2;
    	    			break;
    	    	}
    	    }
    
    	    daan+=a[0];
    	    for(int k=1;k<cao_zuo_ge_shu*2-2;k+=2)
    	    {
    	    	 if(a[k]%cheng_chu==0) daan+=a[k+1];
    	    	 else daan-=a[k+1];
    	    }
    	  
    	    for(int j=0;j<cao_zuo_ge_shu*2;j++)
    		{
    			a[j]=0;
    		}
    	    
    	    return daan;
    	}
    	
    	
    //****************************************	
    	static int cha_chong(int i,int czgs,int[] a,int coc)
    	{
    		int same=0;
    		for(int j=0;j<i;j++)
    	        {
    	            for(int k=0;k<czgs*2-1;k++)
    	            {
    	                if(a[j]==a[k]) same++;
    	                if(a[k+1]==0&&a[k]%coc==3&&k%2==1) return 0;
    	                if(k%2==1&&a[k]%coc==3&&a[k-1]%a[k+1]!=0) return 0;
    	                if(k%2==1&&a[k]%coc==3&&a[k-1]<a[k+1]) return 0;
    	            }
    	            if(same==czgs*2-1) return 0;
    	            else return 1;
    	        }
    		return 1;
    	}
    	
    //***************************************
    	
    	void ji_lu(int[] a,int classes,int i,int kh,int cheng_c,int k_w_z)
    	{
    		kuo_wei_zhi=k_w_z;
    		ti_mu[classes][i]=" ";
    		for(int j=0;j<cao_zuo_ge_shu*2-2;j+=2)
    		{
    			if(kh==1&&j==kuo_wei_zhi) ti_mu[classes][i]+='(';
    			ti_mu[classes][i]+=a[j];
    			if(kh==1&&j==kuo_wei_zhi+2) ti_mu[classes][i]+=')';
    			ti_mu[classes][i]+=fu_hao[a[j+1]%cheng_c];
    		} 
    		ti_mu[classes][i]+=a[cao_zuo_ge_shu*2-2];
    		ti_mu[classes][i]+='=';
    	}
    	
    //**************************************
    	
    	void magic(int czgs1,int kuo_h,int cheng_c,int classes)
    	{
    		temp[classes]++;
    		cao_zuo_ge_shu=czgs1;
    		kuo_hao=kuo_h;
    		cheng_chu=cheng_c;
    		int t,kh=0;
    		
    		Random rand1 = new Random();
    		Random x = new Random();
    		for(int i=0;i<num;i++)
    	    {
    	        for(int k=0;k<cao_zuo_ge_shu*2-1;k++)
    	        {
    	        	if(kuo_h==1&&k==0) 
    	        	{
    	        		kuo_wei_zhi=rand1.nextInt(fan_wei+1)%cao_zuo_ge_shu;
    	        		kh=rand1.nextInt(fan_wei+1)%2;
    	        	}
    	            a[k]=rand1.nextInt(fan_wei+1);            //随机生成
    	        }
    	        
    	        
                t=cha_chong(i,czgs1,a,cheng_c);               //查重
               
    	        if(t!=0)
    	        {	
    	        	ji_lu(a,classes,i,kh,cheng_c,kuo_wei_zhi);
    	        	da_an[classes][i]=yun_suan(kh,kuo_wei_zhi); 
    	        	System.out.print(ti_mu[classes][i]);
    	            zuoti(classes,i);
    	        } else i--;
    	    }
    		cuo_ti(classes);
    	}
    
    }
    	
    

      1.更改了存储题目的方式:从之前的用二维数组存储变成了用二维字符串组存储

           2.增加了存储答案的单元:因为存储题目的方式改变,答案需要存起来,所以增加了二维数组用来存储答案

           3.增加了错题本的汇总功能:之前只是在算题之后显示,这次把错题存起来后,增加了错题的历史记录

           4.将错题和错题答案分开存储,为之后再次计算错题做准备

  • 相关阅读:
    大家一起写mvc(二)
    大家一起写mvc(一)
    jquery读取XML 生成页面文件
    jquery点击区域显示或隐藏DIV,点击非该DIV的地方隐藏该DIV
    struts2 iterator排序
    解决JS传参中文乱码
    关于解决 请求被中止:无法建立SSL / TLS安全通道
    查看sqlserver被锁的表以及如何解锁
    查询sqlserver数据库视图、存储过程等包含特定的字符串
    C#中查询字符串中是否包含指定字符/串,使用IndexOf还是Contains?
  • 原文地址:https://www.cnblogs.com/linmob/p/13798246.html
Copyright © 2020-2023  润新知