随机生成方程及答案

bqucvtff  于 2021-07-13  发布在  Java
关注(0)|答案(2)|浏览(473)

我试图随机生成一个方程,也有50%的机会是错误的,并显示不正确的答案。不正确的答案应该有一个错误-2、-1、+1或+2。
有时我的代码会打印这样的除法方程(我不能发布图像):2/10=13 1/5=43等等。
我搞不懂为什么这个等式显示的是一组没有一起检查的数字?
(它首先调用oncreateview方法中的generateEnumbers()

  1. public void generateNumbers() {
  2. //randomly generate 2 numbers and an operator
  3. number1 = (int) (Math.random() * 10) + 1;
  4. number2 = (int) (Math.random() * 10) + 1;
  5. operator = (int) (Math.random() * 4) + 1;
  6. //50% chance whether the displayed answer will be right or wrong
  7. rightOrWrong = (int) (Math.random() * 2) + 1;
  8. //calculate the offset of displayed answer for a wrong equation (Error)
  9. error = (int) (Math.random() * 4) + 1;
  10. generateEquation();
  11. }
  12. public void generateEquation() {
  13. StringBuilder equation = new StringBuilder();
  14. //append the first number
  15. equation.append(number1);
  16. //generate/append the operator and calculate the real answer
  17. if (operator == 1) {
  18. equation.append(" + ");
  19. actualAnswer = number1 + number2;
  20. } else if (operator == 2) {
  21. equation.append(" - ");
  22. actualAnswer = number1 - number2;
  23. } else if (operator == 3) {
  24. equation.append(" x ");
  25. actualAnswer = number1 * number2;
  26. } else if (operator == 4) {
  27. if ((number1%number2==0) && (number1>number2)) {
  28. actualAnswer = number1 / number2;
  29. } else {
  30. generateNumbers();
  31. }
  32. equation.append(" / ");
  33. }
  34. //append the second number and the equals sign
  35. equation.append(number2 + " = ");
  36. //we will display the correct answer for the equation
  37. if (rightOrWrong == 1) {
  38. displayedAnswer = actualAnswer;
  39. equation.append(displayedAnswer);
  40. }
  41. //we will display an incorrect answer for the equation
  42. //need to calculate error (-2, -1, +1, +2)
  43. else {
  44. if (error == 1) {
  45. displayedAnswer = actualAnswer - 1;
  46. } else if (error == 2) {
  47. displayedAnswer = actualAnswer - 2;
  48. }else if (error == 3) {
  49. displayedAnswer = actualAnswer + 1;
  50. }else {
  51. displayedAnswer = actualAnswer + 2;
  52. }
  53. //append the displayed answer with error
  54. equation.append(displayedAnswer);
  55. }
  56. questionNumber.setText("You have answered " + count + " out of 20 questions");
  57. finalEquation.setText(equation.toString());
  58. }
xwmevbvl

xwmevbvl1#

我想你需要放一个 return 通话后的声明 generateNumbers

  1. } else if (operator == 4) {
  2. if ((number1%number2==0) && (number1>number2)) {
  3. actualAnswer = number1 / number2;
  4. } else {
  5. generateNumbers();
  6. }
  7. equation.append(" / ");
  8. }

因为这将重启整个过程,而不是继续增加数字。

zysjyyx4

zysjyyx42#

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

  1. public void generateNumbers() {
  2. number1 = (int) (Math.random() * 10) + 1;
  3. number2 = (int) (Math.random() * 10) + 1;
  4. //don't get operator here
  5. //operator = (int) (Math.random() * 4) + 1;
  6. rightOrWrong = (int) (Math.random() * 2) + 1;
  7. error = (int) (Math.random() * 4) + 1;
  8. //don't generate equation here, start (in the View with generateEquation instead of generate numbers
  9. //generateEquation();
  10. }
  11. public void generateEquation() {
  12. StringBuilder equation = new StringBuilder();
  13. generateNumbers();
  14. //determine operator here
  15. operator = (int) (Math.random() * 4) + 1;
  16. equation.append(number1);
  17. if (operator == 1) {
  18. equation.append(" + ");
  19. actualAnswer = number1 + number2;
  20. } else if (operator == 2) {
  21. equation.append(" - ");
  22. actualAnswer = number1 - number2;
  23. } else if (operator == 3) {
  24. equation.append(" x ");
  25. actualAnswer = number1 * number2;
  26. } else if (operator == 4) {
  27. equation.append(" / ");
  28. // generate new numbers if they are not suiteable
  29. while((number1%number2!=0) && (number1<number2))
  30. {
  31. generateNumbers();
  32. }
  33. actualAnswer = number1 / number2;
  34. }
  35. ......
展开查看全部

相关问题