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