我的程序在一次迭代后突破了第一个for循环

时间:2018-03-17 22:40:33

标签: java arrays loops for-loop

这是我的代码。它询问用户的术语和定义,然后对用户进行测验。 (它告诉用户术语,用户输入答案。)程序使用数组来存储术语和定义。如果用户没有得到正确的定义,程序会询问用户是否要再次研究它。如果是这样,他们将输入yes,程序将把它存储在一个单独的数组中。程序在所有术语和定义上对用户进行测验后,第2轮开始,程序将仅在星号定义上对用户进行测验。问题是,代码只运行for循环(在第1轮上对用户进行测验),然后跳到第2轮。为什么会这样?我已经尝试过查看其他人的问题和答案,但我似乎无法在我的代码中找到问题。

import java.util.*;

public class Ptcreate {
    public static void main(String[] args) {
        String term;
        String definition;
        Scanner userInput = new Scanner(System.in);
        System.out.println("How many terms would you like to study?");
        int number_terms = userInput.nextInt();
        String[] term_array = new String[number_terms];
        String[] def_array = new String[number_terms];
        String[] star_array = new String[number_terms];
        String[] stardef_array = new String[number_terms];
        System.out.println("Now, enter the " + number_terms + " terms now.");
        for (int i = 0; i < number_terms; i++) {
            term_array[i] = userInput.next();
        }
        System.out.println(
                "Now, enter all the definitions, in the correct order such that it matches the order of the terms you entered.");
        for (int i = 0; i < number_terms; i++) {
            def_array[i] = userInput.next();
        }
        System.out.println("Ok. Now for the testing!");
        for (int i = 0; i <= number_terms; i++) { // the for loop that isn't
                                                  // working.
            System.out.println("What is definition " + (i + 1));
            String answer = userInput.next();
            if (answer.equals(def_array[i])) {
                System.out.println("Correct");
                star_array[i] = "null";
                stardef_array[i] = "null";
            } else if (!answer.equals(def_array[i])) {
                do {
                    System.out.println("Incorrect.");
                    System.out.println("Would you like to study this term again? Type y or n.");
                    String bool = userInput.next();
                    if (bool.equals("y")) {
                        star_array[i] = term_array[i];
                        stardef_array[i] = def_array[i];
                    } else if (bool.equals("n")) {
                        star_array[i] = "null";
                        stardef_array[i] = "null";
                    }
                    System.out.println("What is the definition " + (i + 1));
                    answer = userInput.next();
                } while (!answer.equals(def_array[i]));
                if (answer.equals(def_array[i])) {
                    System.out.println(
                            "Correct"); /*
                                         * when the user finally enters the
                                         * right definition, the program skips
                                         * to the code below
                                         */
                }
            }
            System.out.println("Now, time for testing definitions you starred!");
            for (int z = 0; z < number_terms; z++) {
                if (star_array[z].equals("null")) {
                    break;
                } else {
                    System.out.println("What is the definition of " + star_array[z] + " ?");
                    String star_answer = userInput.next();
                    if (star_answer.equals(stardef_array[z])) {
                        System.out.println("Correct.");
                    } else if (!star_answer.equals(stardef_array[z])) {
                        do {
                            System.out.println("Incorrect. Please try again.");
                            System.out.println("What is the definition of " + star_array[z] + " ?");
                            star_answer = userInput.next();
                        } while (!star_answer.equals(stardef_array[z]));
                    }
                }
            }
        }
    }
}

2 个答案:

答案 0 :(得分:0)

for (int i = 0; i <= number_terms; i++)

你有number_terms + 1次迭代。替换为

for (int i = 0; i < number_terms; i++)

答案 1 :(得分:0)

错误是你用注释标记的for循环&#34; for循环没有工作&#34;没有循环遍历所有定义。处理完第一个定义之后,这个for循环继续处理第二轮,而不是继续循环到第二个定义,依此类推。修复程序要求您在打印语句之前放置此for循环的结束括号&#34;现在,测试您已加星标的定义的时间!&#34;如下所示。我添加了注释&#34; end for-loop以确保循环所有定义&#34;在我在上面的代码中向上移动的for循环结束括号中。另外,这个for循环的迭代条件应该是&#39; i&lt; number_terms&#39;正如之前的海报所表明的那样。

import java.util.*;

public class Ptcreate {
  public static void main(String[] args) {
    String term;
    String definition;
    Scanner userInput = new Scanner(System.in);
    System.out.println("How many terms would you like to study?");
    int number_terms = userInput.nextInt();
    String[] term_array = new String[number_terms];
    String[] def_array = new String[number_terms];
    String[] star_array = new String[number_terms];
    String[] stardef_array = new String[number_terms];
    System.out.println("Now, enter the " + number_terms + " terms now.");
    for (int i = 0; i < number_terms; i++) {
        term_array[i] = userInput.next();
    }
    System.out.println(
            "Now, enter all the definitions, in the correct order such " +
            "that it matches the order of the terms you entered.");
    for (int i = 0; i < number_terms; i++) {
        def_array[i] = userInput.next();
    }
    System.out.println("Ok. Now for the testing!");
    for (int i = 0; i < number_terms; i++) { // the for loop that isn't
                                              // working.
        System.out.println("What is definition " + (i + 1));
        String answer = userInput.next();
        if (answer.equals(def_array[i])) {
            System.out.println("Correct");
            star_array[i] = "null";
            stardef_array[i] = "null";
        } else if (!answer.equals(def_array[i])) {
            do {
                System.out.println("Incorrect.");
                System.out.println("Would you like to study this term again? Type y or n.");
                String bool = userInput.next();
                if (bool.equals("y")) {
                    star_array[i] = term_array[i];
                    stardef_array[i] = def_array[i];
                } else if (bool.equals("n")) {
                    star_array[i] = "null";
                    stardef_array[i] = "null";
                }
                System.out.println("What is the definition " + (i + 1));
                answer = userInput.next();
            } while (!answer.equals(def_array[i]));
            if (answer.equals(def_array[i])) {
                System.out.println(
                        "Correct"); /*
                                     * when the user finally enters the
                                     * right definition, the program skips
                                     * to the code below
                                     */
            }
        }
    } // end for-loop to ensure looping of all definitions
        System.out.println("Now, time for testing definitions you starred!");
        for (int z = 0; z < number_terms; z++) {
            if (star_array[z].equals("null")) {
                break;
            } else {
                System.out.println("What is the definition of " + star_array[z] + " ?");
                String star_answer = userInput.next();
                if (star_answer.equals(stardef_array[z])) {
                    System.out.println("Correct.");
                } else if (!star_answer.equals(stardef_array[z])) {
                    do {
                        System.out.println("Incorrect. Please try again.");
                        System.out.println("What is the definition of " + star_array[z] + " ?");
                        star_answer = userInput.next();
                    } while (!star_answer.equals(stardef_array[z]));
                }
            }
        }
    }
}