【问题标题】:Multiplication table, ask until all correct answers are made乘法表,询问直到所有正确答案
【发布时间】:2018-08-14 18:07:14
【问题描述】:

我有一个程序可以帮助用户学习乘法表,然后显示正确/错误答案的结果。第一步是简单地询问用户要处理哪个乘法表(1-9)。然后用户将得到一个随机数序列乘以选择的乘法表。如果用户回答正确,则不会再次显示该数字,但如果不正确,则将显示该数字,直到做出正确答案为止。

一种情况可能是用户选择“3”,然后它将以随机顺序显示,例如 (3x7 =, 3x1 =, 3x9 =...)。并且用户将在每个“=”之后回答。现在,我只能按升序打印,我应该在 while 循环中使用 Random 与所选表相乘吗?

我的第二个问题是如何再次询问错误回答的数字,直到正确回答?我是否认为在这种情况下 for 循环不是最佳选择?

到目前为止,这是我的代码:

public class Multiplication {
    public static void main (String[] args) {
        Scanner inread = new Scanner (System.in);
        int answer;

        System.out.println("Choose multiplication table (1-9)");
        int num1= inread.nextInt();

        for (int i=1; i<11; i++) {
            System.out.println("Write answer after = ");
            System.out.println(num1 + " x " + (i) + " = ");
            answer=inread.nextInt();

            if (answer == (num1 * i) ) {
                System.out.println("Correct answer");
                // Do not show that number again
            }

            else {
                System.err.println("Wrong answer");
                //Show this number again. 
            }
        }
     }
  }

int num1 = inread.nextInt(); 之后的新代码;

unanswered.add(1);
unanswered.add(2);
unanswered.add(3);
unanswered.add(4);
unanswered.add(5);
unanswered.add(6);
unanswered.add(7);
unanswered.add(8);
unanswered.add(9);
unanswered.add(10);

Collections.shuffle(unanswered);
  while (!unanswered.isEmpty()) {
      System.out.println(num1 + "*" + "unanswered" + " = "); //?
      answer = inread.nextInt();
if (answer == (num1 * unanswered)) {                         //?
    unanswered.remove(unanswered);                           //?
 }
}

所以,我认为这几乎是您建议的方式?但是我确信我可以以更漂亮的方式添加数字。我习惯于使用 for 循环遍历列表,然后使用计数器显示列表。所以我在哪里放了一个“?”是因为我不确定如何指定我尝试在列表中的哪个位置,例如删除一个数字。

或者我应该在我最初拥有的 for 循环中使用 while 循环吗?这样我就可以在 for 循环中使用 (i) 来指定我将在列表中显示和删除的位置?

【问题讨论】:

  • 研究使用 ArrayList 来存储尚未正确猜到的数字。如果他们猜对了,将其从 ArrayList 中删除。如果猜错了,请勿删除!您还可以使用 Collections.shuffle 方法来打乱您的 Arraylist:stackoverflow.com/a/3732080/8121683。然后您可以继续直到 ArrayList 为空,可能使用while 循环来这样做
  • 如果一题被随机选题,同一个题可以再选一次吗?

标签: java loops multiplication


【解决方案1】:

一个好的问题和一个好的编码开始。

在解决所有乘法问题之前要求输入的一种方法是while 循环。 正如@Easton 指出的ArrayList 来存储数字,Collections.shuffle 将帮助进行设置。通过提前创建 ArrayList 然后使用 while loop 直到它为空以提示用户继续回答。

编辑

朝着正确的方向前进。为了简化未回答数字的创建,请使用 for 循环,例如:for(i=1, i&lt;=10,i++) 然后 add(i) 到未回答。

在 while 循环中,获取第一个索引:unanswered[0] 并将其设置为 num1,然后如果答案正确,请将其删除(就像现在一样)。如果不使用Collections.rotate on unanswered by 1。这会将未回答的问题移动到数组的末尾,以便稍后再次尝试。

【讨论】:

  • 我已经用 while 循环、arraylist 和 shuffle 开始了我的代码,但是我被困在我应该如何指定 arrayList 中我应该删除的位置等方面。我在我写的地方进行了编辑新代码!
【解决方案2】:

您可以在下面找到哈希表问题的解决方案,您可以对其进行修改,以便用户不能输入大于 9 或小于 0 的数字,但这应该适合您的目的:

import java.util.Random;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class Multiplication {
    public static void main (String[] args) {
        Map<Integer, Integer> list = new HashMap<Integer, Integer>();
        Scanner inread = new Scanner (System.in);
        int answer;

        System.out.println("Choose multiplication table (1-9)");
        int num1= inread.nextInt();

        for (int i = 1; i<10; i++) {
            list.put(i, num1*i);
        }

        System.out.println(list);

        while (!list.isEmpty()) {
            System.out.println("Write answer after = ");

            Random generator = new Random();
            Object[] keys = list.keySet().toArray();
            Object randomValue = keys[generator.nextInt(keys.length)];

            int next = (Integer) randomValue;

            System.out.println(num1 + " x " + (next) + " = ");
            answer=inread.nextInt();

            if (answer == (num1 * next)) {
                System.out.println("Correct answer");
                list.remove(next);
            } else {
                System.err.println("Wrong answer");
            }
        }

        System.out.println("Congrats!!!");
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-13
    • 2017-08-27
    • 1970-01-01
    • 1970-01-01
    • 2019-05-02
    • 1970-01-01
    • 2019-03-07
    相关资源
    最近更新 更多