简单Java数学问题生成器运行并终止

简单Java数学问题生成器运行并终止,java,math,Java,Math,我的程序应该问用户一个乘法问题。如果用户回答正确,它会打印“干得好!还有一个问题:[插入问题]”(它永远不会停止这样做)。如果用户回答不正确,程序会说“不完全正确。请重试:[相同的问题]”,直到用户回答正确为止。它询问第一个问题,用户回答正确,但不显示它应该显示的消息。当用户第二次得到正确答案时,它会显示消息。第三次用户得到正确答案时,它终止。谢天谢地,用户一直在无限期地重复同一个问题(在用户正确之前,程序不会从同一个问题继续)。代码如下: 导入java.security.SecureRando

我的程序应该问用户一个乘法问题。如果用户回答正确,它会打印“干得好!还有一个问题:[插入问题]”(它永远不会停止这样做)。如果用户回答不正确,程序会说“不完全正确。请重试:[相同的问题]”,直到用户回答正确为止。它询问第一个问题,用户回答正确,但不显示它应该显示的消息。当用户第二次得到正确答案时,它会显示消息。第三次用户得到正确答案时,它终止。谢天谢地,用户一直在无限期地重复同一个问题(在用户正确之前,程序不会从同一个问题继续)。代码如下:

导入java.security.SecureRandom;
导入java.util.Scanner;
公共课数学方法{
static int num1;//保存实际的安全随机数
static int num2;//保存另一个实际的安全随机数
静态SecureRandom number1;//成为SecureRandom的新实例
静态SecureRandom number2;//成为SecureRandom的另一个新实例
静态int-answer;//成为用户输入
专用静态扫描仪输入=新扫描仪(System.in);//创建新扫描仪
MethodMath(){}//构造函数
public void isFalse(){
而(num1*num2!=answer){//则会询问相同的问题,直到用户答对为止
System.out.print(“不完全正确。请重试:“+num1+”乘以“+num2+”?:”;
answer=input.nextInt();
}
}
公共布尔numGen(){//生成乘法问题()
number1=新的SecureRandom();
num1=编号1.nextInt(10);
number2=新的SecureRandom();
num2=第2个数字。下一个数字(10);
系统输出打印(“什么是“+num1+”乘以“+num2+”?:”);
answer=input.nextInt();
这个.isFalse();
返回true;
}
公共静态void main(字符串[]args){
MethodMath mm=新MethodMath();
//计算机辅助教学程序
mm.numGen();//第一个问题
if(mm.numGen()){//if numGen返回true
System.out.println(“干得好!还有一个问题:”);
mm.numGen();
}
}
}

为什么它在3个正确答案后终止?

它在3个正确答案后终止,因为您只调用
mm.numGen()3次。我认为你想要的主要方法是:

public static void main(String[] args) {
        MethodMath mm = new MethodMath();


        while(mm.numGen()) {
            System.out.println("Great job! Here is another problem: ");
        }
}

如果您想继续提问,请更改:

if (mm.numGen()) {// If numGen returns true
        System.out.println("Great job! Here is another problem: ");
        mm.numGen();}
致:

说明:


当括号中的条件为true时(在本例中,您的numGen返回true),代码将继续执行

尝试以真正的OOP方式设置程序。程序运行得越好,就越容易阅读

将扫描程序传递给类以更好地处理资源。我不知道为什么要创建多个
SecureRandom
实例,因为其中一个也可以。此外,当提交非数字值时,程序将退出

导入java.security.SecureRandom;
导入java.util.InputMismatchException;
导入java.util.Scanner;
公共课数学方法{
专用扫描仪输入;
私家车;
公共方法数学(扫描仪输入){
这个输入=输入;
this.rand=new SecureRandom();
}
公开作废开始(){
做{
试一试{
numGen();
System.out.println(“干得好!还有一个问题:\n”);
}捕获(输入不匹配异常e){
打破
}
}虽然(正确);
System.out.println(“正在退出…”);
}
受保护的无效检查应答(整数num1,整数num2){
布尔正确=错误;
int-answer=num1*num2;
做{
System.out.printf(“什么是%d乘以%d?:”,num1,num2);
int response=input.nextInt();
如果(应答==应答){
input.nextLine();//刷新缓冲区。
正确=正确;
打破
}
System.out.print(“不完全正确。请重试:”;
}而(!正确);
}
受保护的void numGen(){//生成乘法问题()
int num1=兰德·奈克斯汀(10);
int num2=rand.nextInt(10);
核对答案(num1,num2);
}
公共静态void main(字符串[]args){
扫描仪输入=新扫描仪(System.in);//创建新扫描仪
MethodMath mm=新MethodMath(输入);
mm.start();//计算机辅助教学程序
input.close();
}
}

下面是一个通用提示的示例,它可以询问用户一个随机乘法或加法问题

导入java.security.SecureRandom;
导入java.util.*;
公共抽象类MethodMath{
专用扫描仪输入;
私家车;
私人int max;
公共静态最终类乘法扩展了MethodMath{
公共乘法(扫描仪输入,int max){
超级(输入,最大值);
}
@凌驾
公共整数计算(整数a,整数b){
返回a*b;
}
@凌驾
公共字符串提示(int a、int b){
返回String.format(“什么是%d乘以%d?:”,a,b);
}
}
公共静态最终类添加扩展了MethodMath{
公共添加(扫描仪输入,int max){
超级(输入,最大值);
}
@凌驾
公共整数计算(整数a,整数b){
返回a+b;
}
@凌驾
公共字符串提示(int a、int b){
返回String.format(“什么是%d加%d?:”,a,b);
}
}
公共MethodMath(扫描仪输入,int max){
这个输入=输入;
this.rand=new SecureRandom();
this.max=max;
}
公开摘要int计算(int a,int b);
公共抽象字符串提示符(inta,intb);
受保护的空白
while (mm.numGen()) {// If numGen returns true
        System.out.println("Great job! Here is another problem: ");}