0

プログラムは2桁の数字と記号を描画します。IFステートメントは、描画されているかどうかを確認します+/-。+を引く場合、-が減算の場合。

ドロー作品。

次に、ユーザーにタスクの結果が提供されます。そしてここに問題があります。

あなたが「結果」にある結果を与えるならば。何かが機能する場合に機能します。間違った答えを入力した場合は、トースト:再試行してくださいと表示されます。

問題は、良い結果が得られるように表示されることがあるということです。再試行してください。

この問題を解決するにはどうすればよいですか?別のチェックかもしれませんか?

コード:

private String sign;
    private int numberOne, numberTwo, result = 0;
    private int charsEntered = 0;
    private EditText et;
    private Button ok;
    String[] CHAR = { "+", "-" };
    Random intGen = new Random();
    CaptchaInterface.OnCorrectListener mCorrectListener;

    public void setOnCorrectListener(CaptchaInterface.OnCorrectListener listener) {
        mCorrectListener = listener;
    }

    public EasyMathCaptcha(Context context) {
        super(context);
        getWindow().requestFeature(Window.FEATURE_NO_TITLE);
    }

    public static int randomOne() {
        Random generator = new Random();
        int x = generator.nextInt(10);
        return x;
    }

    public static int randomTwo() {
        Random generator = new Random();
        int x = generator.nextInt(10);
        return x;
    }

    public void onCreate(Bundle icicle) {
        setContentView(R.layout.all_math_captcha);

        sign = (CHAR[Math.abs(intGen.nextInt() % 2)]);
        numberOne = randomOne();
        numberTwo = randomTwo();

        TextView display = (TextView) findViewById(R.id.tvRandomTask);
        display.setText(numberOne + " " + sign + " " + numberTwo);

        if ((CHAR[Math.abs(intGen.nextInt() % 2)]).equals("+")) {
            result = (numberOne + numberTwo);
        } else if ((CHAR[Math.abs(intGen.nextInt() % 2)]).equals("-")) {
            result = (numberOne - numberTwo);
        }

        et = (EditText) findViewById(R.id.etTask);
        ok = (Button) findViewById(R.id.btAgree);
        ok.setOnClickListener(this);

    }

    public void onClick(View arg0) {
        // TODO Auto-generated method stub
        try {
            charsEntered = Integer.parseInt(et.getText().toString());
        } catch (NumberFormatException nfe) {
            Toast.makeText(et.getContext(), "That's not a number!",
                    Toast.LENGTH_SHORT).show();
        }

        if (charsEntered == result) {
            if (mCorrectListener != null)
                mCorrectListener.onCorrect();
            dismiss();

        } else if (charsEntered != result) {
            Toast.makeText(et.getContext(), "Try again!", Toast.LENGTH_SHORT)
                    .show();
        }

    }
}
4

1 に答える 1

2

エラーは次のコードにあります。

    if ((CHAR[Math.abs(intGen.nextInt() % 2)]).equals("+")) {
        result = (numberOne + numberTwo);
    } else if ((CHAR[Math.abs(intGen.nextInt() % 2)]).equals("-")) {
        result = (numberOne - numberTwo);
    }

乱数ジェネレーターを使用しているため、最初に得た結果とは異なる結果が得られます。

次のように変更します。

    if (sign.equals("+")) {
        result = (numberOne + numberTwo);
    } else if (sign.equals("-")) {
        result = (numberOne - numberTwo);
    }
于 2012-09-04T14:26:27.820 に答える