0

该程序绘制两个数字和符号。IF 语句检查它是否已绘制 + / -。如果它绘制+加,如果-是减法。

画作品。

然后给用户任务的结果。这就是问题所在。

如果您给出“结果”中的结果。如果某事起作用。如果您输入的答案不正确,则会显示 Toast: Try Again。

问题是有时会显示“重试”,以提供良好的结果。

如何消除这个问题?可能不同的检查?

代码:

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 回答