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

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

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.将错题和错题答案分开存储,为之后再次计算错题做准备

原文地址:https://www.cnblogs.com/linmob/p/13798246.html