Java循环询问10个数学问题

时间:2018-03-27 15:50:29

标签: java

我目前正在尝试创建一个程序,要求用户回答10个乘法问题,然后在答案正确或不正确的情况下输出,然后记录用户得到的答案数。我目前的代码如下所示,但是我无法让分数增加,因为每当我运行它时,分数始终保持在1.我想知道是否有人可以帮我解决这个问题

package Assignment1;
import java.util.Scanner;
import static java.lang.System.in;

public class Main {
    public static void main(String[] args) {
        for (int i = 0; i < 11; i++) {
            int number1 = (int) (Math.random() * 10) + 10;
            int number2 = (int) (Math.random() * 10) + 10;
            Scanner input = new Scanner(in);
            System.out.print("What is " + number1 + " * " + number2 + " ?");
            int answer = input.nextInt();

            while ((number1 * number2) != answer) {
                System.out.print("Incorrect");
                answer = input.nextInt();
            }

            if ((number1 * number2) == answer) {
                System.out.println("Correct");
                int score = 0;
                score = score + 1;
                System.out.println("Score is currently: " + score);
            }
        }
    }
}

3 个答案:

答案 0 :(得分:2)

为了解决您的问题,您需要了解变量lm = linear_model.LinearRegression() model = lm.fit(X_train.values.reshape(-1,1), y_train) 。变量的scope是简单的简单英语:它的生命周期。它的生命周期是在大括号之间定义的,我的意思是如果变量是在&#34; scope&#34;之后创建的,它只会存在直到&#34; {&#34 ;。还有其他情况,但暂时不要介意。

考虑到这一点,让我们分析一下这里的问题。在您的计划中,您希望得分为&#39;变量在所有计算下生存并通过将先前分数添加到新结果来保持变化,从而在每次迭代时产生新分数。 不要创建&#39;得分&#39;在每次迭代中。

请注意,您正在创建变量&#39;得分&#39;在每个循环上 - 导致其值从内存中删除(实际上,它的参考是在每个循环结束时(当它死亡时)正在被擦除以使其值在内存中丢失)和一个新的循环。得分&#39;变量是在下一次迭代中创建的。

所以,我想您现在知道如何更改代码了。您只需更改变量&#39;得分&#39;在循环之前 - 所以它是在&#34; }&#34;之前创建的。来自{循环,而不是在每次迭代时擦除和创建。

for

答案 1 :(得分:1)

您已在if块中声明了score变量。因此,每次有正确的答案时,score初始化为0,然后设置为1.将分数声明为实例变量,或者在main方法中声明局部变量(在for循环之前)

答案 2 :(得分:1)

如果您只想要10个问题,for循环应该从i = 1i < 11,而不是i = 0。此外,您需要将分数移动到for循环之外,否则每次循环重新开始时它将被声明为0。正如Telmo Vaz所说,这是由于变量的范围。我注意到的另一件事是,您可以使用score++将1添加到分数,而不是score = score + 1。我会让你进一步优化你。

import java.util.Scanner;
import static java.lang.System.in;

public class Main {
    public static void main(String[] args) {
        int score = 0;
        for (int i = 1; i < 11; i++) {       // 1 -> 10
            int number1 = (int) (Math.random() * 10) + 10;
            int number2 = (int) (Math.random() * 10) + 10;
            Scanner input = new Scanner(in);
            System.out.print("What is " + number1 + " * " + number2 + " ?");
            int answer = input.nextInt();

            while ((number1 * number2) != answer) {
                System.out.print("Incorrect");
                answer = input.nextInt();
            }

            if ((number1 * number2) == answer) {
                System.out.println("Correct");
                score++;         // == (score = score + 1)
                System.out.println("Score is currently: " + score);
            }
        }
    }
}