生成随机数学问题

时间:2014-09-22 04:57:36

标签: java

我们必须制作一个程序而不是为不同的年级生成数学问题,因此它们会因难度而变化。我们必须在最小和最大边界内产生2个随机数。然后我们必须让这两个数字执行一个操作。例如,将它们加在一起,或者将它们相互分开或将它们相乘等。

该程序根据用户提供的年级进行工作。每年级别具有不同的最小和最大数量,以及不同的操作。例如。第1年只是加法和减法,第7年是加法减法乘法除法等。我已经定义了不同的方法来帮助我做到这一点,但我似乎无法让我的程序生成我想要的东西。它应该看起来像下面附带的图像。我的部分代码在这里。当我运行我的程序时,它只产生一些整数(10或20,取决于用户选择尝试的数学问题)。它不会产生数字之间的任何操作,例如(+, - ,/,x)

有人能指出我正确的方向,我做错了吗?

private static void generateQuestion(int yearLevel) {
    int min = getMin(yearLevel);
    int max = getMax(yearLevel);

    int num1 = (int) (min + (max - min) * Math.random());
    int num2 = (int) (min + (max - min) * Math.random());

    int oper = getOper(yearLevel);
    String result = " ";
    char op;
    switch (oper) {
        case 1:
            op = '+';
            result = (num1 + num2 + " ");
            break;
        case 2:
            op = '-';
            result = (num1 - num2 + " ");
            break;
        case 3:
            op = '*';
            result = (num1 * num2 + " ");
            break;
        case 4:
            op = '/';
            result = (num1 / num2 + " ");
            break;
        case 5:
            op = '%';
            result = (num1 % num2 + " ");
            break;

    }
    ;
}

private static int getMin(int yearLevel) {
    int min = 0;
    if (yearLevel == 0 || yearLevel == 1 || yearLevel == 2 || yearLevel == 3 || yearLevel == 4) {
        min = 0;
    }
    if (yearLevel == 5 || yearLevel == 6) {
        min = -999;
    }
    if (yearLevel == 7) {
        min = -9999;
    }

    return min;
}

private static int getMax(int yearLevel) {

    int max = 9;
    if (yearLevel == 0 || yearLevel == 1 || yearLevel == 2 || yearLevel == 3 || yearLevel == 4) {
        max = 9;
    }

    if (yearLevel == 5 || yearLevel == 6) {
        max = 999;
    }
    if (yearLevel == 7) {
        max = 9999;
    }

    return max;

}

public static int getOper(int yearLevel) {

    yearLevel = 0;
    int opBounds = 1;
    if (yearLevel == 1 || yearLevel == 2) {
        opBounds = 2;
    }
    if (yearLevel == 3 || yearLevel == 4 || yearLevel == 5) {
        opBounds = 4;
    }

    if (yearLevel == 7) {
        opBounds = 5;
    }

    return opBounds;

}

}

2 个答案:

答案 0 :(得分:0)

我是一个像你一样的初学者,我会制作额外的课程问题,以保持生成的谜语和正确的结果。然后在你的

private static Question generateQuestion(int yearLevel) {
    Question out=new Question();
    ...
    //build string for selected case, for example
    String answer=num1+" / "+num2;
    double result=num1/num2; //rather use double

    out.answer=answer; //String field
    out.result=result;

    return out;
}

然后通过显示问题并将其与预期结果进行比较来处理它。

答案 1 :(得分:0)

您已将结果声明为字符串并尝试在其中添加数字,但您无法做到这一点。
所以这段代码:

String result = " ";
    char op;
    switch (oper) {
        case 1:
            op = '+';
            result = (num1 + num2 + " ");
            break;
        case 2:
            op = '-';
            result = (num1 - num2 + " ");
            break;

更改为:

int result = 0;
    char op;
    switch (oper) {
        case 1:
            op = '+';
            result = (num1 + num2);
            break;
        case 2:
            op = '-';
            result = (num1 - num2);
            break;

然后你必须使用像" Integer.toString(int i)"这样的java方法。打印出整数结果(例子)。