When the student gets the question right, the program asks another random question. But when the student gets the question wrong, it still asks them a new question. I want to CHANGE it so that when the student gets the question wrong, it asks them the same question again until they get it right. PLEASE help, thank you so much!
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;
}
}