给二柱子做算术本---升级版
经过修改,二柱子的算术本已经不出错了
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("\n*****错题*****\n");
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("*****正确*****\n");
return 1;
}
else
{
System.out.print("*****错误*****\n");
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.将错题和错题答案分开存储,为之后再次计算错题做准备