Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从主方法重新运行主方法_Java_Netbeans - Fatal编程技术网

Java 从主方法重新运行主方法

Java 从主方法重新运行主方法,java,netbeans,Java,Netbeans,基本上,我需要为这个数学测验做的最后一件事是编程,我必须询问用户是否愿意回答更多的问题,如果愿意,重新运行Main方法中的所有内容。如果没有,打印再见。否定很容易,但我不确定如果他们说是,如何告诉它重新运行主方法。下面是我的main方法中的代码 public static void main(String[] args) { Scanner in = new Scanner(System.in); int digit = 0; String result1 = ge

基本上,我需要为这个数学测验做的最后一件事是编程,我必须询问用户是否愿意回答更多的问题,如果愿意,重新运行Main方法中的所有内容。如果没有,打印再见。否定很容易,但我不确定如果他们说是,如何告诉它重新运行主方法。下面是我的main方法中的代码

 public static void main(String[] args) {
    Scanner in = new Scanner(System.in);

    int digit = 0;

    String result1 = getUserChoice("");

    digit = getNumberofDigit1(digit);

    int numberOfProblems = amountOfProblems();

    for (int i = 0; i < numberOfProblems; i++) {
    int number1 = getRandomNumber1(digit);
    int number2 = getRandomNumber2(digit);

    System.out.println("Enter your answer to the following problem: \n" + 
            number1 + result1 + number2);
    int correctAnswer = getCorrectAnswer(number1, result1, number2);

    int userAnswer = getUserAnswer();

    CheckandDisplayResult(correctAnswer, userAnswer);
    }
        System.out.println("Would you like to solve more probelms(Y/N)? ");
        String moreProblems = in.next();

        if ("Y".equals(moreProblems)){
            digit = 0;

    result1 = getUserChoice("");

    digit = getNumberofDigit1(digit);

    numberOfProblems = amountOfProblems();

    for (int i = 0; i < numberOfProblems; i++) {
    int number1 = getRandomNumber1(digit);
    int number2 = getRandomNumber2(digit);

    System.out.println("Enter your answer to the following problem: \n" + 
            number1 + result1 + number2);
    int correctAnswer = getCorrectAnswer(number1, result1, number2);

    int userAnswer = getUserAnswer();

    CheckandDisplayResult(correctAnswer, userAnswer);
    }
        System.out.println("Would you like to solve more probelms(Y/N)? ");
        moreProblems = in.next();

          if ("Y".equals(moreProblems)){

        }
        System.out.println("Thank you for taking this quiz, Goodbye!");

}
现在我试过这样的方法

如果Y.EqualsMore问题{ 复制并通过主方法 }


但这有一个错误,那就是需要无限循环,因为如果是的话,你必须在每个if中都有更多的problems语句,这意味着它永远不会停止编码,你将永远保持复制和粘贴。

你可以做的是将main中的所有内容移动到另一个静态方法中,称之为interact。然后,在主要方面,只要用户想与您的程序交互,就需要调用interactive的逻辑。换句话说,把数学测验放在一种方法中,把呈现测验的业务放在主要方法中。如果需要,您的程序将更易于阅读和进一步修改。

您可以在while循环中包含所有要重新运行的代码:

boolean run = true;
while (run) {
    // Here your code
    // Here input if user want to re-run
    if (getUserChoice("").equals("NO"))
        run = false;
}
boolean more = false;

do {

    // all your code

    more = "Y".equals(moreProblems);

} while (more);

将所有内容放在一个大的do while循环中:

boolean run = true;
while (run) {
    // Here your code
    // Here input if user want to re-run
    if (getUserChoice("").equals("NO"))
        run = false;
}
boolean more = false;

do {

    // all your code

    more = "Y".equals(moreProblems);

} while (more);
或者,如果您的扫描仪在循环之外声明,您可以:

do {

    // all your code

} while ("Y".equals(in.next()));

与其他人的建议不同,这是我更喜欢的方法:

while(true) {
    //do all your stuff
    if(/*some exit condition*/) { break; }
}

我想这个原型可能会对你有所帮助

import java.util.Scanner;
 public class MathsClass {
    public static void main(String[] args){
        MathsClass object = new MathsClass();

        while(object.response())
            object.mathsQuiz();

    }

    public void mathsQuiz(){
        //your quiz functionalities
        System.out.println("Add two nos");
    }

    public boolean response(){
        System.out.println("Would u like to solve more problems? ");
        Scanner scanner = new Scanner(System.in);
        boolean response = scanner.nextBoolean();

        return response;
    }
}

我考虑过这个问题,但是作业中说所有方法都必须从主方法调用,所以测验必须留在主方法部分。那么,按照其他人的建议,进行while循环。有人能告诉我为什么我得到了否决票吗?