我如何在Java中重复这个?

时间:2013-09-28 02:20:38

标签: java

当学生得到正确的问题时,该程序会询问另一个随机问题。但是当学生提出错误的问题时,它仍然会问他们一个新问题。我想改变它,以便当学生得到错误的问题时,它再次问他们同样的问题,直到他们做对了。请帮忙,非常感谢你!

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;
    }
}

6 个答案:

答案 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)

随机生成no1no2。所以,你应该把你的问题保存在全局变量中。使用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;
}