有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java生成带有预设答案的随机表达式

我正在制作一个Android应用程序,它将执行以下操作:

  • 生成随机数(1-9)并保存
  • 生成答案为上一步的表达式
  • 显示表达式和一个数字从1到9的“numpad”
  • 等待用户按下numpad上的一个按钮并检查其是否正确
  • 如果用户选择了错误的答案,则为与之前相同的数字生成一个新表达式(步骤2)
  • 如果用户选择了正确答案,请转至步骤1

现在我正在创建一个方法来生成表达式:

public class Main {

    public static void main(String[] args) {
        Random rnd = new Random();

        int number = rnd.nextInt(9) + 1;
        String example = expressionGeneration(number);

        System.out.println(example);

    }

    private static String expressionGeneration(int a) {
        StringBuilder sb = new StringBuilder(50);
        Random rnd = new Random();
        char op = '$'; // to make it initialized and recognize mistakes
        int x;
        double y = 0.5;

        do {
            int choice = rnd.nextInt(7);
            x = rnd.nextInt(100);
            switch (choice) {
            case 0:
                y = a + x;
                op = '-';
                break;
            case 1:
                y = a - x;
                op = '+';
                break;
            case 2:
                y = a * x;
                op = '/';
                break;
            case 3:
                x = rnd.nextInt(99) + 1;
                y = a / x;
                op = '*';
                break;
            case 4:
                y = Math.pow(a, 2); // will be changed later to display the result right
                op = '√';
                break;
            case 5:
                if (Math.sqrt(a) % 1 == 0) {
                    y = Math.sqrt(a);
                    op = '^';
                    x = 2;
                }
                break;
            case 6:         //it's a joke   
                if (x == 33) {
                    return "33";
                }
                y = 0.5;    //to regenerate if (x != 33)
                break;
            }
        } while ((int) y != y); //to check if y is integer and if no - regenerate

        sb.append((int) y + "" + op + "" + x + "=" + a); // answer here is just for testing

        return sb.toString();
    }
}

大多数时候,它给我的正是我需要的,例如:“-8+11=3”,但有时它会给出这样的例子:

  1. 0$92=3
  2. 0*40=8

我认为这意味着乘法不能正常工作,在某些情况下op和y没有在循环中初始化,但这怎么可能呢? 或者,你可以建议任何其他算法,将在我的情况下工作

所以我的问题是:我做错了什么?还有其他方法来做我需要的事情吗

谢谢


共 (1) 个答案

  1. # 1 楼答案

    当使用两个整数除以/时,结果将始终是一个整数,即使存储结果的变量是double。要解决这个问题,您需要明确声明除法中的一个数字是double

    case 3:
        x = rnd.nextInt(99) + 1;
        y = a / (double) x;
        op = '*';
        break;