【发布时间】: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