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”,但有时它会给出这样的例子:
- 0$92=3
- 0*40=8
我认为这意味着乘法不能正常工作,在某些情况下op和y没有在循环中初始化,但这怎么可能呢? 或者,你可以建议任何其他算法,将在我的情况下工作
所以我的问题是:我做错了什么?还有其他方法来做我需要的事情吗强>
谢谢
# 1 楼答案
当使用两个整数除以
/
时,结果将始终是一个整数,即使存储结果的变量是double
。要解决这个问题,您需要明确声明除法中的一个数字是double