package test;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Random;
/*string类比较的时候,使用==比较的是地址是否相同,是否属于同一类对象
使用类的成员函数,equals()
*/
/*目前进度:
*
* 未实现:
* 1.标准化输出 输出随机数生成的题目和打印最后所有的题目以及结果
* 2.标准化输出 需要的存放题目和答案的数组
* 10组题目一个数组+20组正确答案(对于除法运算一道题两个答案)一个数组+20组输入答案一个数组
*/
public class ArithmeticTest1 {
static ques[] Ques=new ques[11];//存放10道随机生成的题目,声明为静态变量,方便多函数调用,并且static 的main只能调用静态变量
static ansdivi[] Ans=new ansdivi[11];//存放输入答案
static ansdivi[] Ans0=new ansdivi[11];//存放正确答案
public static void main(String args[])
{
//实例化键盘输入对象
BufferedReader keyboardIn = new BufferedReader(new InputStreamReader(System.in));
int sum=0;//统计分数,最后这两个变量尝试是否可以修改为全局
String fu[]= {"+","-","X","/"};//配套输入r时进行的随机选择运算方;
//命令行输入,确定10道题目的类型
//将第一个命令行参数(类型为字符串)转换为整数,确定位数
int numberOfDigit=Integer.parseInt(args[3]);
//System.out.println(args[3]);
//System.out.println(number1);
//确定运算类型
if(args[2].equals("+"))
{
//int questionAnswer[][]=new int[10][1];
/*//标准化输出
String formatString="%1$"+numberOfDigit+"d"+0+"%2$"+numberOfDigit+"d = %3$"+(numberOfDigit+2)+"d %4$"+(numberOfDigit+2)+"d\n";
System.out.printf(formatString);*/
for(int i=1;i<=10;i++)
{
sum=my_add(numberOfDigit,sum,i);
}
if(sum==100)
System.out.println("Success");
}
else if(args[2].equals("-"))
{
//int questionAnswer[][]=new int[10][1];
/*//标准化输出
String formatString="%1$"+numberOfDigit+"d"+0+"%2$"+numberOfDigit+"d = %3$"+(numberOfDigit+2)+"d %4$"+(numberOfDigit+2)+"d\n";
System.out.printf(formatString);*/
for(int i=1;i<=10;i++)
{
sum=my_sub(numberOfDigit,sum,i);
}
if(sum==100)
System.out.println("Success");
}
else if(args[2].equals("X"))
{
//int questionAnswer[][]=new int[10][1];
/*//标准化输出
String formatString="%1$"+numberOfDigit+"d"+0+"%2$"+numberOfDigit+"d = %3$"+(numberOfDigit+2)+"d %4$"+(numberOfDigit+2)+"d\n";
System.out.printf(formatString);*/
for(int i=1;i<=10;i++)
{
sum=my_plus(numberOfDigit,sum,i);
}
if(sum==100)
System.out.println("Success");
}
else if(args[2].equals("/"))
{
//int questionAnswer[][]=new int[10][1];
/*//标准化输出
String formatString="%1$"+numberOfDigit+"d"+0+"%2$"+numberOfDigit+"d = %3$"+(numberOfDigit+2)+"d %4$"+(numberOfDigit+2)+"d\n";
System.out.printf(formatString);*/
for(int i=1;i<=10;i++)
{
sum=my_divi(numberOfDigit,sum,i);
}
if(sum==100)
System.out.println("Success");
}
else if(args[2].equals("r"))
{
//int questionAnswer[][]=new int[10][1];
/*//标准化输出
String formatString="%1$"+numberOfDigit+"d"+0+"%2$"+numberOfDigit+"d = %3$"+(numberOfDigit+2)+"d %4$"+(numberOfDigit+2)+"d\n";
System.out.printf(formatString);*/
for(int i=1;i<=10;i++)
{
int xuanze;
while(true)
{
//实例化随机数发生器
Random numberGenerator=new Random();
//产生一个指定位数以内的随机整数
xuanze=numberGenerator.nextInt((int)Math.pow(10,1));
if(xuanze>=0&&xuanze<=3)
break;
}
//System.out.println(xuanze);
if(fu[xuanze].equals("/"))
sum=my_divi(numberOfDigit,sum,i);
else if(fu[xuanze].equals("+"))
sum=my_add(numberOfDigit,sum,i);
else if(fu[xuanze].equals("-"))
sum=my_sub(numberOfDigit,sum,i);
else if(fu[xuanze].equals("X"))
sum=my_plus(numberOfDigit,sum,i);
}
if(sum==100)
System.out.println("Success");
}
//输出语句块
allPrint(sum);
}
/*switch(args[2])
{
case "+":myadd();break;
//case "-":mysub();break;
//case "X":myplus();break;
//case "/":mydivi();break;
}如果使用强制类型转换成int类型是否可以使用switch语句
*/
static void allPrint(int sum)
{
for(int i=1;i<=10;i++)
{
System.out.println("Random question no."+i+":");
Ques[i].printString();
System.out.println("输入答案:");
Ans[i].printAns();
System.out.println("正确答案:");
Ans0[i].printAns();
}
System.out.println("总得分:"+sum);
}
static int myadd(int n,int i)//n位数,第i道题目
{
//实例化随机数发生器
Random numberGenerator=new Random();
//产生一个指定位数以内的随机整数
int number1=numberGenerator.nextInt((int)Math.pow(10,n));
//System.out.println(number1);
int number2=numberGenerator.nextInt((int)Math.pow(10,n));
Ques[i]=new ques();
Ques[i].changeQue(number1, "+", number2);
Ques[i].printString();
//System.out.println(number1+"+"+number2+"=");
return number1+number2;
}
static int mysub(int n,int i)//n位数
{
int number1,number2;
st:
while(true)
{
//实例化随机数发生器
Random numberGenerator=new Random();
//产生一个指定位数以内的随机整数
number1=numberGenerator.nextInt((int)Math.pow(10,n));
//System.out.println(number1);
number2=numberGenerator.nextInt((int)Math.pow(10,n));
if(number1<number2)
continue st;
else
break st;
}
Ques[i]=new ques();
Ques[i].changeQue(number1, "-", number2);
Ques[i].printString();
return number1-number2;
}
static int myplus(int n,int i)//n位数
{
int number1,number2;
//实例化随机数发生器
Random numberGenerator=new Random();
//产生一个指定位数以内的随机整数
number1=numberGenerator.nextInt((int)Math.pow(10,n));
//System.out.println(number1);
number2=numberGenerator.nextInt((int)Math.pow(10,n));
Ques[i]=new ques();
Ques[i].changeQue(number1, "X", number2);
Ques[i].printString();
return number1*number2;
}
static void mydivi(int n,ansdivi aans,int i)//n位数
{
int number1,number2;
st:
while(true)
{
//实例化随机数发生器
Random numberGenerator=new Random();
//产生一个指定位数以内的随机整数
number1=numberGenerator.nextInt((int)Math.pow(10,n));
//System.out.println(number1);
number2=numberGenerator.nextInt((int)Math.pow(10,n));
if(number2<=0)//除数要大于0
continue st;
else
break st;
}
Ques[i]=new ques();
Ques[i].changeQue(number1, "/", number2);
Ques[i].printString();
aans.ansyu=number1%number2;//余数
aans.ans= number1/number2;//整除
}
static int my_add(int numberOfDigit,int sum,int i)
{
//实例化键盘输入对象
BufferedReader keyboardIn = new BufferedReader(new InputStreamReader(System.in));
//从键盘输入整数保存在变量answer中
int ans;//输入数据需要放在try块中?编辑器要求
try {
int r_ans=myadd(numberOfDigit,i);
System.out.println("输入答案:");
ans = Integer.parseInt(keyboardIn.readLine());
Ans[i]=new ansdivi();//存放输入答案
Ans[i].setans(ans);
Ans0[i]=new ansdivi();//存放正确答案
Ans0[i].setans(r_ans);
if(ans==r_ans)
sum+=10;
} catch (NumberFormatException | IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return sum;
}
/*static boolean myequal(int a,int b)
{
if()
}*/
static int my_sub(int numberOfDigit,int sum,int i)
{
//实例化键盘输入对象
BufferedReader keyboardIn = new BufferedReader(new InputStreamReader(System.in));
//从键盘输入整数保存在变量answer中
int ans;//输入数据需要放在try块中?编辑器要求
try {
int r_ans=mysub(numberOfDigit,i);
System.out.println("输入答案:");
ans = Integer.parseInt(keyboardIn.readLine());
Ans[i]=new ansdivi();//存放输入答案
Ans[i].setans(ans);
Ans0[i]=new ansdivi();//存放正确答案
Ans0[i].setans(r_ans);
if(ans==r_ans)
sum+=10;
} catch (NumberFormatException | IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return sum;
}
static int my_plus(int numberOfDigit,int sum,int i)
{
//实例化键盘输入对象
BufferedReader keyboardIn = new BufferedReader(new InputStreamReader(System.in));
//从键盘输入整数保存在变量answer中
int ans;//输入数据需要放在try块中?编辑器要求
try {
int r_ans=myplus(numberOfDigit,i);
System.out.println("输入答案:");
ans = Integer.parseInt(keyboardIn.readLine());
Ans[i]=new ansdivi();//存放输入答案
Ans[i].setans(ans);
Ans0[i]=new ansdivi();//存放正确答案
Ans0[i].setans(r_ans);
if(ans==r_ans)
sum+=10;
} catch (NumberFormatException | IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return sum;
}
static int my_divi(int numberOfDigit,int sum,int i)
{
//实例化键盘输入对象
BufferedReader keyboardIn = new BufferedReader(new InputStreamReader(System.in));
int ans,ansyu;
//从键盘输入整数保存在变量answer中
ansdivi aans=new ansdivi();//输入数据需要放在try块中?编辑器要求
try {
mydivi(numberOfDigit,aans,i);
System.out.println("输入答案:");
ans = Integer.parseInt(keyboardIn.readLine());
ansyu=Integer.parseInt(keyboardIn.readLine());
Ans[i]=new ansdivi();//存放输入答案
Ans[i].setans(ans);
Ans[i].setansyu(ansyu);
Ans0[i]=new ansdivi();//存放正确答案
Ans0[i].setans(aans.ans);
Ans0[i].setansyu(aans.ansyu);
if(ans==aans.ans&&ansyu==aans.ansyu)
sum+=10;
} catch (NumberFormatException | IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return sum;
}
}
class ansdivi
{
int ans,ansyu;
public ansdivi()
{
ans=0;ansyu=100000;
}
public void setans(int n)
{
ans=n;
}
public void setansyu(int n)
{
ansyu=n;
}
public void printAns()
{
String aa="0";
if(ansyu==100000)
{
aa="%1$d\n";
System.out.printf(aa, ans);
}
else
{
aa="%1$d "+"%2$d\n";
System.out.printf(aa, ans,ansyu);
}
}
}
//存放10道随机生成的题目
class ques
{
int aa,cc;
String bb;
public ques()
{
aa=0;cc=0;
bb="+";
}
public void changeQue(int a,String b,int c)
{
aa=a;bb=b;cc=c;
}
public void printString()
{
String outString="%1$d"+bb+"%2$d\n";
System.out.printf(outString,aa,cc);
}
public String getString()
{
return bb;
}
public int getaa()
{
return aa;
}
public int getcc()
{
return cc;
}
}
测试样例
输入
java s r 2
+输入答案后
输出结果