我制作的Android应用会执行以下操作:
所以现在我正在创建一个生成表达式的方法:
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",但有时会给出类似这样的例子:
我认为这意味着乘法不能正常工作,在某些情况下,op和y不会在循环中初始化,但它怎么可能? 或者也许你可以建议任何其他算法在我的情况下。
所以我的问题是:我做错了什么,还有其他方法可以做我需要的吗?
由于
答案 0 :(得分:1)
使用两个整数除/
时,结果将始终为整数,即使存储结果的变量为double
。要解决此问题,您需要明确说明除法中的一个数字是double
。
case 3:
x = rnd.nextInt(99) + 1;
y = a / (double) x;
op = '*';
break;