乘法表,询问直到所有正确答案都正确

时间:2018-08-14 18:07:14

标签: java loops multiplication

我有一个程序,可以帮助用户学习乘法表,然后显示对/错答案的结果。第一步是简单地询问用户要使用哪个乘法表(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)来指定列表中我将显示或删除的位置?

2 个答案:

答案 0 :(得分:1)

一个很好的问题,一个良好的编码开端。

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

编辑

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

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

答案 1 :(得分:0)

下面您可以找到哈希表问题的解决方案,可以对其进行修改,以使用户不能键入大于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!!!");
    }
}