加减法小测试

设计背景

小孩9月份入学小学一年级,经常想出一些10以内、20以内加减法锻炼小孩的口算能力。时间久了,出题越来越耗时间,所以开发这个小工具,使用者选择运算方式、选择填空位置、选择数字范围,系统自动出题,解决出题的问题。

运行效果

设计思路

第一步,输入运算规则,1为加法,2为减法

第二步,如果选择的是加法,输入填空地方,1为加数,2为和;
如果选择的是减法,输入填空地方,1为被减数,2为减数,3为差

第三步,输入数字范围,例如输入10,即为10以内的加减法

第四步,系统根据选择的条件自动出题

第五步,使用者输入答案,并校验答案是否正确;答案输入-1,即为退出系统

开发代码

主函数

public static void main(String[] args) {
    System.out.println("数学加减法玩一玩!");
    int operRule = inputNum("第一步:请输入运算规则,1为加法,2为减法", 1, new Integer[]{1, 2});
    int answerIndex = 0;
    if(operRule == 1) {
        answerIndex = inputNum("第二步:你选择的是加法,请输入填空地方,1为加数,2为和", 1, new Integer[]{1, 2});
    }else {
        answerIndex = inputNum("第二步:你选择的是减法,请输入填空地方,1为被减数,2为减数,3为差", 1, new Integer[]{1, 2, 3});
    }
    int numRanger = inputNum("第三步:请输入数字范围,例如10为10以内的加减法", 10, null);
    try {
        createTopic(operRule, answerIndex, numRanger);
    } catch (Exception e) {
        System.out.println(e.getMessage());
        System.exit(-1);
    }
}

输入规则

使用者输入相对应的规则,如果输入值设置了可选项,则做相应判断

/**
 * 输入数字
 * @param printChar:显示名称
 * @param value:默认值
 * @param reserveValue :备用值,为输入范围,为空,则表示没有限制
 * @return int
 */
private static int inputNum(String printChar, int value, Integer[] reserveValue) {
    System.out.println(printChar);
    System.out.print("输入值:");
    Scanner numInputScanner = new Scanner(System.in);
    try {
        value = numInputScanner.nextInt();
        if(null != reserveValue && reserveValue.length > 0 && !Arrays.asList(reserveValue).contains(value)) {
            System.out.println("输入有误,请重新输入!");
            value = inputNum(printChar, value, reserveValue);
        }
    }catch (Exception e) {
        System.out.println("输入有误,请重新输入!");
        value = inputNum(printChar, value, reserveValue);
    }
    return value;
}

系统出题

系统根据输入的规则,自动判断题型,题型分为以下五种

1:2+?=3
 2:2+3=?
 3:?-2=5
 4:8-?=5
 5:8-2=?

判断题型

/**
 * 判断题型:
 * 1:2+?=3
 * 2:2+3=?
 * 3:?-2=5
 * 4:8-?=5
 * 5:8-2=?
 * @param operRule,加减法规则
 * @param answerIndex,答案位置
 * @return int
 */
private static int judgeType(int operRule, int answerIndex) {
    if(operRule == 1) {
        if(answerIndex == 1) {
            return 1;
        }else if(answerIndex == 2) {
            return 2;
        }
    }else if(operRule == 2) {
        if(answerIndex == 1) {
            return 3;
        }else if(answerIndex == 2) {
            return 4;
        }else if(answerIndex == 3) {
            return 5;
        }
    }
    return 0;
}

出题

/**
 * 创建题目
 * 1:2+?=3
 * 2:2+3=?
 * 3:?-2=5
 * 4:8-?=5
 * 5:8-2=?
 * @param operRule,加减法规则
 * @param answerIndex:答案所在位置
 * @param numRanger:出题数字范围
 */
private static void createTopic(int operRule, int answerIndex, int numRanger) throws Exception {
    //设置题型
    int topicType = judgeType(operRule, answerIndex);
    if(topicType == 0) {
        throw new Exception("系统出小差了,请联系管理员");
    }
    System.out.print("\t\t");
    while (true) {
        int count1 = (int)(Math.random() * numRanger);
        int count2 = (int)(Math.random() * numRanger);
        switch (topicType) {
            case 1:
                if(count1 <= count2) {
                    System.out.print(count1 + " + ? = " + count2);
                    checkResult(count2 - count1, true);
                }
                break;
            case 2:
                System.out.print(count1 + " + " + count2 + " = ");
                checkResult(count1 + count2, false);
                break;
            case 3:
                if(count1 + count2 <= numRanger) {
                    System.out.print("? - " + count1 + " = " + count2);
                    checkResult(count1 + count2, true);
                }
                break;
            case 4:
                if(count1 >= count2) {
                    System.out.print(count1 + " - ? = " + count2);
                    checkResult(count1 - count2, true);
                }
                break;
            case 5:
                if(count1 >= count2) {
                    System.out.print(count1 + " - " + count2 + " = ");
                    checkResult(count1 - count2, false);
                }
                break;
            default:
                throw new Exception("系统出小差了,请联系管理员");
        }
    }
}

输入答案并自动校验

/**
 * 检查结果是否正确
 * @param value,正确答案
 * @param showBlank 显示是否显示空格
 */
private static void checkResult(int value, boolean showBlank) {
    if(showBlank) {
        System.out.print("\t\t");
    }
    Scanner resultScanner = new Scanner(System.in);
    int result = resultScanner.nextInt();
    if(result == -1) {
        System.exit(-1);
    }
    if(result == value) {
        System.out.print("回答正确\t");
    }else {
        System.out.print("回答错误\t");
    }
}

退出系统

答案输入-1即退出系统

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值