Java 随机生成方程及答案

Java 随机生成方程及答案,java,android,random,equation,Java,Android,Random,Equation,我试图随机生成一个等式,这个等式也有50%的几率出错并显示错误的答案。错误答案的错误应该是-2、-1、+1或+2 有时我的代码会打印出这样的除法方程(我无法发布图像): 2 / 10 = 13 1 / 5 = 43 等等 我搞不懂为什么这个等式显示的是一组没有一起检查的数字 (它以调用onCreateView方法中的GenerateEnumbers()开始 我认为您需要在调用中的generateNumbers之后添加一个return语句 } else if (operator == 4) {

我试图随机生成一个等式,这个等式也有50%的几率出错并显示错误的答案。错误答案的错误应该是-2、-1、+1或+2

有时我的代码会打印出这样的除法方程(我无法发布图像): 2 / 10 = 13 1 / 5 = 43 等等

我搞不懂为什么这个等式显示的是一组没有一起检查的数字

(它以调用onCreateView方法中的GenerateEnumbers()开始


我认为您需要在调用中的
generateNumbers
之后添加一个
return
语句

} else if (operator == 4) {
    if ((number1%number2==0) && (number1>number2)) {
        actualAnswer = number1 / number2;
    } else {
        generateNumbers();
    }
    equation.append(" / ");

}

因为这将重新启动整个过程,而不是继续使用更多的数字。

更改代码以解决低概率除法问题:

public void generateNumbers() {
    number1 = (int) (Math.random() * 10) + 1;
    number2 = (int) (Math.random() * 10) + 1;

    //don't get operator here
    //operator = (int) (Math.random() * 4) + 1;

    rightOrWrong = (int) (Math.random() * 2) + 1;
    error = (int) (Math.random() * 4) + 1;

    //don't generate equation here, start (in the View with generateEquation instead of generate numbers
    //generateEquation();
}

public void generateEquation() {
    StringBuilder equation = new StringBuilder();
    generateNumbers();

    //determine operator here
    operator = (int) (Math.random() * 4) + 1;


    equation.append(number1);
    if (operator == 1) {
        equation.append(" + ");
        actualAnswer = number1 + number2;
    } else if (operator == 2) {
        equation.append(" - ");
        actualAnswer = number1 - number2;
    } else if (operator == 3) {
        equation.append(" x ");
        actualAnswer = number1 * number2;
    } else if (operator == 4) {
        equation.append(" / ");
        // generate new numbers if they are not suiteable
        while((number1%number2!=0) && (number1<number2))
        {
            generateNumbers();
        }
        actualAnswer = number1 / number2;
    }
    ......
public void generateNumbers(){
number1=(int)(Math.random()*10)+1;
number2=(int)(Math.random()*10)+1;
//别让接线员过来
//运算符=(int)(Math.random()*4)+1;
RightorError=(int)(Math.random()*2)+1;
错误=(int)(Math.random()*4)+1;
//不要在此处生成方程式,在视图中使用generateEquation而不是GenerateNumber开始
//生成方程();
}
公共无效生成公式(){
StringBuilder公式=新的StringBuilder();
generateNumbers();
//此处确定运算符
运算符=(int)(Math.random()*4)+1;
方程式。附加(编号1);
if(运算符==1){
方程式。附加(“+”);
实际功率=1号+2号;
}else if(运算符==2){
方程式。附加(“-”);
actualAnswer=number1-number2;
}else if(运算符==3){
方程式。附加(“x”);
actualAnswer=number1*number2;
}else if(运算符==4){
方程式。附加(“/”);
//如果不适合,则生成新号码

而((number1%number2!=0)和(数字1您的代码中有一些奇怪的东西。您生成数字,然后生成方程式。然后,在生成方程式时,如果它们不适合除法,则生成新的数字,因此再次调用generate numbers函数。这反过来又调用generate equation函数,但当此操作完成后,第一次调用generate方程还在继续。是的,当我试图求解它时,我就是这么想的,但我太深入了,弄不明白。有标记的答案解决了它。很好,谢谢。不知道我怎么会没有想到。直到现在我才意识到它实际显示除法方程的几率很低,但它仍然有效。C也许会更好,但我认为这会解决问题。
public void generateNumbers() {
    number1 = (int) (Math.random() * 10) + 1;
    number2 = (int) (Math.random() * 10) + 1;

    //don't get operator here
    //operator = (int) (Math.random() * 4) + 1;

    rightOrWrong = (int) (Math.random() * 2) + 1;
    error = (int) (Math.random() * 4) + 1;

    //don't generate equation here, start (in the View with generateEquation instead of generate numbers
    //generateEquation();
}

public void generateEquation() {
    StringBuilder equation = new StringBuilder();
    generateNumbers();

    //determine operator here
    operator = (int) (Math.random() * 4) + 1;


    equation.append(number1);
    if (operator == 1) {
        equation.append(" + ");
        actualAnswer = number1 + number2;
    } else if (operator == 2) {
        equation.append(" - ");
        actualAnswer = number1 - number2;
    } else if (operator == 3) {
        equation.append(" x ");
        actualAnswer = number1 * number2;
    } else if (operator == 4) {
        equation.append(" / ");
        // generate new numbers if they are not suiteable
        while((number1%number2!=0) && (number1<number2))
        {
            generateNumbers();
        }
        actualAnswer = number1 / number2;
    }
    ......