一、业务要求
- 题目写一道题出来一道题
- 每写完一道按回车,可以看到结果是否正确
- 看完结果还可以看一看当前答题正确率
- 每一道题如果做错,可以选择是否显示答案
二、设计思路
- 我们可以程序运行的时候首先做的第一件事先得到20到题。为了保证20到题不会出现重复,可以选择用map键值对的方式接受。
- 当然20到题是随机的,加减乘除肯定也都是随机的,那么对于数字的随机数我们可以使用Random类去实现,对于限定了+、-、*、/的符号随机也会是问题。
- 运算符号可以写死在list的集合当中,然后用控制在0~3的随机数去调用相应位置的符号。
- 当随机数和符号都可以获得的时候,可以通过主函数去调用相应的方法获得符号和数字,然后聚合成字符创,放入map键中,然后map值里放相应的结果。
- 方然是小学就不能出现减法是负数,除法是分数,还要分母不能为0,看代码中是如何实现的。
三、用Java代码实现相应功能
import java.util.*;
public class Match {
public static void main(String[] args) {
HashMap map =new HashMap();
while(map.size()<20){
int num1=getNum();
int num2=getNum();
char operator= (char) getOperator();
switch (operator){
case '+':
map.put(num1+"+"+num2+"=",num1+num2);break;
case '-':
if(num1>=num2){
map.put(num1+"-"+num2+"=",num1-num2);
}else {
map.put(num2+"-"+num1+"=",num2-num1);
}break;
case '*':
map.put(num1+"*"+num2+"=",num1*num2);break;
case '/':
if(num1==num2){
map.put(num1+"/"+num2+"=",1);
}else if(num1>num2){
while(num1%num2!=0){
num1=getNum();
num2=getNum();
}
map.put(num1+"/"+num2+"=",num1/num2);
}else {
while(num2%num1!=0){
num1=getNum();
num2=getNum();
}
map.put(num2+"/"+num1+"=",num2/num1);
}break;
}
}
Set keys=map.keySet();
int mistakeNum = 0;
int correctNum = 0;
for (Object key : keys) {
Scanner scanner=new Scanner(System.in);
System.out.print(key);
int num=scanner.nextInt();
if(num==(int)map.get(key)){
System.out.println("回答正确,进入下一题");
correctNum++;
}else{
System.out.print("回答错误,是否查看答案(y/n):");
mistakeNum++;
String str=scanner.next();
if(str.equals("y")){
System.out.println("正确答案是"+map.get(key));
}
}
System.out.println("做对:"+correctNum+"题目\t做错:"+mistakeNum+"题目\t当前正确率是:"
+(double)correctNum/(mistakeNum+correctNum)*100+"%");
}
}
public static int getNum(){
Random random = new Random();
int num=random.nextInt(100)+1;
return num;
}
public static Object getOperator(){
Random random = new Random();
List list=new ArrayList();
list.add('+');
list.add('-');
list.add('*');
list.add('/');
char ch=(char)list.get(random.nextInt(4));
return ch;
}
}
四、用Scala语言实现功能
import java.util.Scanner
import scala.collection.mutable
import scala.util.Random
object MYtest {
def main(args: Array[String]): Unit = {
val map= new mutable.HashMap[String,Int]()
while(map.size<20){
var num1=getNum()
var num2=getNum()
var opertor=getSymbol()
opertor match {
case "+" => {
map.put(num1 + "+" + num2 + "=", num1 + num2)
}
case "-" => {
if (num1 > num2) {
map.put(num1 + "-" + num2 + "=", num1 - num2)
}
if (num1 < num2) {
map.put(num2 + "-" + num1 + "=", num2 - num1)
}
}
case "*" => {
map.put(num1 + "*" + num2 + "=", num1 * num2)
}
case "/" => {if(num1>=num2){
while(num1%num2!=0){
num1=getNum()
num2=getNum()
}
map.put(num1+"/"+num2+"=",num1/num2)
}else {
while(num2%num1!=0){
num1=getNum()
num2=getNum()
}
map.put(num2+"/"+num1+"=",num2/num1)
}}
}
}
var mistakeNum = 0
var correctNum = 0
var flog=true
for (elem <- map) {
var scanner=new Scanner(System.in)
print(elem._1)
var num=scanner.nextInt()
if(elem._2==num){
println("输入正确")
flog=true
correctNum = correctNum+1
}else{
println("输入错误")
flog=false
mistakeNum=mistakeNum+1
}
println("做对了"+correctNum+"道题\t做错了"+mistakeNum+"道题"+"正确率:"+
(correctNum/(correctNum+mistakeNum))*100+"%")
if (!flog){
print("是否显示答案(y/n):")
var strIn=new Scanner(System.in)
var str=strIn.next()
if(str.equals("y")){
println(elem._2)
}
}
}
}
def getNum():Int={
var num=Random.nextInt(100)+1;
return num
}
def getSymbol():String={
var symbol=List("+","-","*","/")
var sym=symbol(Random.nextInt(4))
return sym
}
}