题目
每个同学选一个方向,把程序扩展一下:
1、让程序能接受用户输入答案,并判定对错。最后给出总共对/错 的数量。
2、把程序变成一个网页程序,用户通过设定参数,就可以得到各种题目。
3、把程序变成一个Windows 图形界面的程序。
4、把程序变成一个智能手机程序 (你正在用什么手机, 就写那个手机的程序)。(可以延期3周后)
5、选一个你从来没有学过的编程语言,试一试实现基本功能。
设计思想
本次程序采用数组记录答案,包含输入数组和正确结果保存数组,进行比较
源代码
package minirisoft; import java.util.Random;
import java.util.Scanner; public class SizeYunsuan {
public static Random rand=new Random();
public static class Qst
{
static int Operand(int Range)//产生操作数
{
int Opd=rand.nextInt(Range*2+1)-Range;
return Opd;
}
public static char OperatorKind(char Operator,boolean IfSuppMD)//生成运算符
{
int OperatorPossible=rand.nextInt(4);
if(!IfSuppMD)
{
OperatorPossible/=2;
}
switch(OperatorPossible)
{
case 0:
Operator='+';
break;
case 1:
Operator='-';
break;
case 2:
Operator='*';
break;
case 3:
Operator='/';
break;
default:
System.out.print("Error!");
}
return Operator;
}
public static boolean IfRepeated(String str[],int Location)//判断是否重复
{
for(int i=0;i<Location;i++)
{
if(str[i].equals(str[Location]))
return true;
}
return false;
}
public static int Ans(int ans,int Operand1,int Operand2,char Operator)//生成答案
{
switch(Operator)
{
case '+':
ans=Operand1+Operand2;
break;
case '-':
ans=Operand1-Operand2;
break;
case '*':
ans=Operand1*Operand2;
break;
case '/':
ans=Operand1/Operand2;
break;
default:
System.out.print("Error!");
}
return ans;
}
//生成一道运算题
public static void CreateStr(int Range,char Operator,String str[],int i,int QstNum,int ans[],boolean IfSuppMD)
{ int answer = 0;
Qst.OperatorKind(Operator,IfSuppMD);
int Operand1=Qst.Operand(Range);
int Operand2=Qst.Operand(Range);
str[i]=Integer.toString(Operand1);
str[i]+=Operator;
str[i]+=Integer.toString(Operand2);
str[i]+="=";
while(IfRepeated(str,i))//判断是否重复
{
Operand1=Qst.Operand(Range);
Operand2=Qst.Operand(Range);
str[i]=Integer.toString(Operand1);
str[i]+=Operator;
str[i]+=Integer.toString(Operand2);
str[i]+="=";
}
ans[i]=Qst.Ans(answer,Operand1,Operand2,Operator);
}
public static void Display(String str[],int Col)//输出生成的运算题
{ for(int j=0;j<str.length;j++)
{
System.out.print(str[j]);
if(j%Col==Col-1)
{
System.out.println();
}
else
{
System.out.print('\t');
}
}
}
public static void Input(int Input[],int QstNum)//输入问题答案
{
Scanner sca=new Scanner(System.in);
for(int j=0;j<QstNum;j++)
{
Input[j]=sca.nextInt();
}
}
public static void OutAns(int ans[],int QstNum,int Col)//输出答案
{
for(int j=0;j<QstNum;j++)
{
System.out.print(ans[j]);
if(j%Col==Col-1)
{
System.out.println();
}
else
{
System.out.print('\t');
}
}
}
public static void ConfirmAns(int ans[],int Input[],int QstNum,int count)
{
count=0;
for(int i=0;i<QstNum;i++)
{
if(ans[i]==Input[i])
count++;
}
System.out.println("答题正确个数:");
System.out.print(count);
} } public static void main(String args[])
{
int Range,QstNum=0,Col=0,count=0;
boolean IfSuppMD=true;
char Operator = '+';
Scanner sca=new Scanner(System.in);
System.out.println("请输入生成题目的数量:");
QstNum=sca.nextInt();
System.out.println("请输入算数范围:");
Range=sca.nextInt();
System.out.println("请输入划分列数:");
Col=sca.nextInt();
System.out.println("是否支持乘除法:(true/false)");
IfSuppMD=sca.nextBoolean();
String str[] = new String[QstNum];
int ans[]=new int[QstNum];
int Input[]=new int[QstNum];
for( int i=0;i<QstNum;i++)
{
try
{
Qst.CreateStr(Range,Qst.OperatorKind(Operator,IfSuppMD),str,i,QstNum,ans,IfSuppMD);
}
catch(Exception e)
{
i--;
};
}
Qst.Display(str,Col);
Qst.Input(Input, QstNum);
System.out.println("输入答案:");
System.out.println();
Qst.OutAns(Input,QstNum,Col);
System.out.println("正确答案:");
System.out.println();
Qst.OutAns(ans,QstNum,Col);
Qst.ConfirmAns(ans,Input,QstNum,count);
} }
程序截图
实验总结
本次实验对前面解决该问题的思路进行了梳理,不再意气用事,采用java语言重新做了一遍,体验到了java和C++的区别与相似之处,也对模块化算法的精简有了一定的提高,程序本身的问题进行了初步的解决,我会再接再厉!