当学生得到正确的问题时,该程序会询问另一个随机问题。但是当学生提出错误的问题时,它仍然会问他们一个新问题。我想改变它,以便当学生得到错误的问题时,它再次问他们同样的问题,直到他们做对了。请帮忙,非常感谢你!
import java.util.Random;
import java.util.Scanner;
public class Multiplication {
static Random random = new Random();
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int correctCtr =0;
int wrongCtr = 0;
System.out.println("Welcome to the CAI-Knowledge Assessment\n ");
int type = getProblemType(scanner);
System.out.print("Enter difficulty level: ");
int difficulty = scanner.nextInt();
while (true) {
int questionAns = getQuestion(type, difficulty);
int answer = scanner.nextInt();
if (questionAns != answer) {
System.out.println(getWrongResponse());
wrongCtr++;
} else {
System.out.println(getCorrectResponse());
correctCtr++;
}
if ((wrongCtr + correctCtr) == 10) {
double correctness = (correctCtr / 10.0) * 100;
if (correctness > 75) {
System.out.println("Congratulations, you are ready to go to the next level!");
} else {
System.out.println("Please ask your teacher for extra help.");
}
wrongCtr = 0;
correctCtr = 0;
while (true) {
System.out.print("Try again? Y or any other character to exit:");
String response = scanner.next();
if (response.equalsIgnoreCase("y")) {
type = getProblemType(scanner);
System.out.print("Enter difficulty level: ");
difficulty = scanner.nextInt();
break;
} else {
System.out.println("Thank you for learning!");
System.exit(0);
}
}
}
}
}
static int getProblemType(Scanner scanner) {
int type;
while (true) {
System.out.print("What type of problem would you like? \n(1=addition, 2=subtraction, 3=multiplication, 4=division, 5=mixture): ");
type = scanner.nextInt();
if (type > 0 && type < 6) {
break;
} else {
System.out.println("Invalid type!");
}
}
return type;
}
static String getCorrectResponse() {
String response = null;
int index = random.nextInt(4);
switch (index) {
case 0:
response = "Very good!";
break;
case 1:
response = "Excellent!";
break;
case 2:
response = "Nice work!";
break;
case 3:
response = "Keep up the good work!";
break;
}
return response;
}
static String getWrongResponse() {
String response = null;
int index = random.nextInt(4);
switch (index) {
case 0:
response = "No. Please try again.";
break;
case 1:
response = "Wrong. Try once more.";
break;
case 2:
response = "Don't give up!";
break;
case 3:
response = "No. Keep trying.";
break;
}
return response;
}
static int getQuestion(int type, int difficulty) {
int no1 = random.nextInt((int)Math.pow(10, difficulty));
int no2 = random.nextInt((int)Math.pow(10, difficulty));
int returnVal = 0;
if (type == 1) {
System.out.printf("How much is %d plus %d? ",no1,no2);
returnVal = no1 + no2;
} else if (type == 2) {
while (no2 > no1) {
no2 = random.nextInt((int)Math.pow(10, difficulty));
}
System.out.printf("How much is %d minus %d? ",no1,no2);
returnVal = no1 - no2;
} else if (type == 3) {
System.out.printf("How much is %d times %d? ",no1,no2);
returnVal = no1 * no2;
} else if (type == 4) {
while (no2 == 0 || no2 > no1 || no1%no2!=0) {
no2 = random.nextInt((int)Math.pow(10, difficulty));
}
System.out.printf("How much is %d divided by %d? ",no1,no2);
returnVal = no1 * no2;
} else if (type == 5) {
returnVal = getQuestion(random.nextInt(5)+1, difficulty);
}
return returnVal;
}
}
答案 0 :(得分:1)
你自己说了
Set<String> questions = getAllQuestions();
for( String question : questions) {
boolean correctAnswer = false;
while(!correctAnswer) {
correctAnswer = askQuestion(question);
}
}
现在,填写空白。在模板算法中实现方法。如果此人不知道正确答案,为避免遇到无限循环,您可能希望在经过一定次数的尝试后中断循环。我相信你现在可以很容易地将这个逻辑添加到模板算法中。
答案 1 :(得分:1)
你可以采取多种方式。一个简单的hack可以在所示的相同点迭代 -
int answer = scanner.nextInt();
if (questionAns != answer) {
*while (questionAns != answer)*{
wrongAnswer();
System.out.println("Try Again");
int answer = scanner.nextInt();
}
}
static void wrongAnswer(){
System.out.println(getWrongResponse());
wrongCtr++;
}
P.S。我没有测试过代码。祝你好运。
答案 2 :(得分:0)
只需设置另一个变量来跟踪他们是否有正确的问题,然后只有当该变量为假时才重置问题。
Boolean questionCorrect = true;
while (true) {
if (questionCorrect) {
int questionAns = getQuestion(type, difficulty);
}
int answer = scanner.nextInt();
if (questionAns != answer) {
System.out.println(getWrongResponse());
wrongCtr++;
questionCorrect = false;
} else {
System.out.println(getCorrectResponse());
correctCtr++;
questionCorrect = true;
}
答案 3 :(得分:0)
随机生成no1
,no2
。所以,你应该把你的问题保存在全局变量中。使用getQuestion(int type, int difficulty)
方法分配变量。这是示例代码。
String question=""
static int getQuestion(int type, int difficulty){
if(type==2){
question=String.format("How much is %d minus %d? ",no1,no2);
}
}
如果用户出错,你可以问同样的问题。
答案 4 :(得分:0)
你应该简单地缓存一个questionAns(你的int)的实例和一个字符串变量,它在初始化时的格式与打印到输出的格式相同(你可以通过String.format()来实现。)
一旦完成此操作,您还可以包含一个临时布尔值,该布尔值根据用户提供的正确或不正确的值进行更改。然后在while循环的下一次迭代中读取此布尔值,然后让您选择在屏幕上打印新问题(通过您的方法)或打印保存的格式化字符串,这是上一个问题。
答案 5 :(得分:0)
添加2个新变量
boolean isTrue = true;
boolean isFalse = true;
编辑本节
if (isTrue)
int questionAns = getQuestion(type, difficulty);
int answer = scanner.nextInt();
if (questionAns != answer) {
System.out.println(getWrongResponse());
wrongCtr++;
isTrue = false;
isFalse = true;
} else {
System.out.println(getCorrectResponse());
correctCtr++;
isTrue = true;
isFalse = false;
}