Scala与java的对比【用两个代码分别实现小学算数题作业】

9 篇文章 0 订阅

一、业务要求

  1. 题目写一道题出来一道题
  2. 每写完一道按回车,可以看到结果是否正确
  3. 看完结果还可以看一看当前答题正确率
  4. 每一道题如果做错,可以选择是否显示答案

二、设计思路

  1. 我们可以程序运行的时候首先做的第一件事先得到20到题。为了保证20到题不会出现重复,可以选择用map键值对的方式接受。
  2. 当然20到题是随机的,加减乘除肯定也都是随机的,那么对于数字的随机数我们可以使用Random类去实现,对于限定了+、-、*、/的符号随机也会是问题。
  3. 运算符号可以写死在list的集合当中,然后用控制在0~3的随机数去调用相应位置的符号。
  4. 当随机数和符号都可以获得的时候,可以通过主函数去调用相应的方法获得符号和数字,然后聚合成字符创,放入map键中,然后map值里放相应的结果。
  5. 方然是小学就不能出现减法是负数,除法是分数,还要分母不能为0,看代码中是如何实现的。

三、用Java代码实现相应功能

import java.util.*;

/**
 * @Author LiYuQi
 * @Date 2020/7/23
 * @Description
 */
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)
//          println(map.size)
        }
        case "-" => {
          if (num1 > num2) {
            map.put(num1 + "-" + num2 + "=", num1 - num2)
          }
          if (num1 < num2) {
            map.put(num2 + "-" + num1 + "=", num2 - num1)
          }
//          println(map.size)
        }
        case "*" => {
          map.put(num1 + "*" + num2 + "=", num1 * num2)
//          println(map.size)
        }
        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
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值