2

こんにちは皆さん、私は学習演習として数学クイズ プログラムを書いていますが、この「応答」変数をメソッドの後半で認識させることができません。具体的には、いずれかの側に * がある「応答」変数は、以前に宣言された応答変数にリンクしません。私はプログラミングに慣れていないので、基本的なエラーを犯していると確信していますが、それを解決することはできません。誰かが私を助けてくれればありがたいです. ありがとう!

import acm.util.*;
import acm.program.*;


public class MathsQuiz extends ConsoleProgram{

    public void run(){
        println("This program gives atudents a series of maths questions");
        askQuestions();
    }

    private void askQuestions(){
        for (int i = 0; i < NUMBER_OF_QS; i++){
            askQ();
        }
    }

    private void askQ(){
        int answer = rgen.nextInt(0,20);
        int number1 = rgen.nextInt(0,20);
        int number2 = answer - number1;

        if (number2 > 0){
            int response = readInt("What is " + number1 + "+" + number2 + "?");

        }else {
            int response = readInt("What is " + number1 + " " + number2 + "?");
        }

                if (**response** == answer){
                    println("Correct!");
                }else{
                    println("Incorrect");
                }
        }


    private RandomGenerator rgen = RandomGenerator.getInstance(); 

    int NUMBER_OF_QS = 5;
    int RES = 0;
}
4

5 に答える 5

1

responseはローカル変数であり、そのアクセシビリティは、宣言されているブロック内に制限されています。そのため、ブロックresponse内でのみアクセスできます。if elseスコープの範囲外で使用しようとするとresponse、再宣言しない限り、コンパイル時エラーが発生します。

したがって、if elseブロック外で response を使用する場合は、次のようにブロック外で宣言する必要があります。

int response;
if (number2 > 0){
     response = readInt("What is " + number1 + "+" + number2 + "?");
}else {
     response = readInt("What is " + number1 + " " + number2 + "?");
}
于 2013-07-02T14:20:13.467 に答える