这是一个离奇的BUG
看,这个getRandomNum方法的峰值我设置了3,按道理来说,这个方法应该只会返回0,1,2。同理,这个getRandomOperator应该只返回+-x这三种情况才对。
可事实并不是这样
while (true)
{
ci++;
System.out.println("第" + ci + "道题:");
while (true)
{
int i = u.getRandomNum(100);
int o = u.getRandomNum(100);
if (u.getRandomOperator().equals("+")){
if (u.getTrueOrFalseForAdd(i,o)){
int te = i + o;
System.out.println(u.getRandomTopic("+",i,o));
int io = in.nextInt();
if (io == te){
System.out.println("正确!");
tr++;
break;
}else {
System.out.println("错误!正确答案是" + te + "你的答案是" + io);
fa++;
break;
}
}else {
continue;
}
}else if (u.getRandomOperator().equals("-")){
if (u.getTrueOrFalseForSub(i,o)){
int te = i - o;
System.out.println(u.getRandomTopic("-",i,o));
int io = in.nextInt();
if (io == te){
System.out.println("正确!");
tr++;
break;
}else {
System.out.println("错误!正确答案是" + te + "你的答案是" + io);
fa++;
break;
}
}else {
continue;
}
}else if (u.getRandomOperator().equals("x")){
if (u.getTrueOrFalseForMul(i,o)){
int te = i * o;
System.out.println(u.getRandomTopic("x",i,o));
int io = in.nextInt();
if (io == te){
System.out.println("正确!");
tr++;
break;
}else {
System.out.println("错误!正确答案是" + te + "你的答案是" + io);
fa++;
break;
}
}else {
continue;
}
}else {
if (u.getTrueOrFalseForDiv(i,o)){
int te = i / o;
System.out.println(u.getRandomTopic("÷",i,o));
int io = in.nextInt();
if (io == te){
System.out.println("正确!");
tr++;
break;
}else {
System.out.println("错误!正确答案是" + te + "你的答案是" + io);
fa++;
break;
}
}else {
continue;
}
}
}
if (ci == n) break;
}
System.out.println("你做对了" + tr + "道题,做错了" + fa + "道题");
如你所见,在上述代码中,判断执行的if语句判断条件是getRandomOperator方法返回的字符。因为只产生0,1,2三个数字,所以应该只返回+-x三种符号,而在实际代码运行过程中
他居然返回了一个除号,这意味着else语句执行了!可是,else语句不是应该永远不执行才对吗?getRandomNum只返回0,1,2。这意味着getRandomOperator只返回+-x三种符号。那么,这三种符号都在前面的if语句中有啊。怎么算也执行不到else上。如果要执行那getRandomOperator一定返回了除号。可是getRandomOperator不可能返回除号啊。这不科学!
所以,我想问。逻辑上到达哪里出了问题?为什么最后getRandomOperator还是返回了一个除号?