0

DB の項目を EditText (ユーザー入力) の値と比較しようとしています。回答には、「,」で区切られた複数の回答を含めることができます。最初にそれらを stringarray に入れてから、それらを答えと比較します。レーベンシュタイン距離は、答えが良いか悪いかをチェックします ( http://en.wikipedia.org/wiki/Levenshtein_distance#Computing_Levenshtein_distance )。

        userAnswer = etUserAnswer.getText().toString().toLowerCase();
        String[] answers = qAnswer.split(",");

        for (String answer : answers) {
            if (answer.equals(userAnswer)) {
                Toast.makeText(getApplicationContext(), ("Answer Correct"),
                        Toast.LENGTH_SHORT).show();
                tvMessage.setText("You smartass!");
            } else {
                Toast.makeText(getApplicationContext(), ("Wrong"),
                        Toast.LENGTH_SHORT).show();

                points = points - 4;
                String answerGood = answer.toLowerCase();

                LevenshteinDistance lDistance = new LevenshteinDistance();
                int comparisonCheck = lDistance.computeLevenshteinDistance(
                        userAnswer, answerGood);

                if (comparisonCheck == 1) {
                    tvMessage.setText("Almost there, but not quite yet!");

                } else if (comparisonCheck > 1) {
                    tvMessage.setText("Are you serious, totally wrong?!");
                }
            }

        }

次のように、DB 内の質問に対する回答を持っているとします: tree,test,radio

私は2つの問題を抱えています:

1.「radi」と入力すると、「あと少し...」というメッセージが表示されます。「tes」と入力すると、これも表示されるはずですが、代わりに「Are you Serious,...」という行が表示されます。前回と比べても変わらないと思います。

2.正しくないものを入力するたびに、-4 ではなく -12 が返されます。これは、答えが 3 つあり、3 回ループするためだと思いますが、1 回だけカウントする方法がわかりません。

誰でも途中で私を助けることができますか?ありがとう!

4

1 に答える 1

1

最小のレーベンシュタイン距離を与える単語を知る必要がないと仮定すると、最小距離のみを見つけるようにループを変更できます。

userAnswer = etUserAnswer.getText().toString().toLowerCase();
String[] answers = qAnswer.split(",");
LevenshteinDistance lDistance = new LevenshteinDistance();
int minDistance = lDistance.computeLevenshteinDistance(
                    userAnswer, answers[0].toLowerCase());

for (int i = 1; i < answers.length; ++i) {
    minDistance = Math.min(minDistance, lDistance.computeLevenshteinDistance(
                    userAnswer, answers[i].toLowerCase()));
}

if (minDistance == 0) {
    // Correct answer...
} else {
    // Wrong answer...
    points -= 4;
    // etc etc...
}
于 2012-10-08T20:51:51.443 に答える