2012-10-08 79 views
0

我试图将我的数据库中的项目与EditText(用户输入)的值进行比较。答案可以有多个答案,由','分隔。我首先将它们放入一个串列表中,然后将它们与答案进行比较。 LevenshteinDistance检查答案是否更好(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?!"); 
       } 
      } 

     } 

假设我有如下的一个数据库中的问题的答案:树,测试,无线电

我有两个问题

当我键入“radi”它给了我'几乎那里...',这很好。如果我输入“tes”,它也应该给我,但是它会给我'你是否认真,......'这一行。我想它一直与最后一个相比。

2.每当我输入一些不正确的东西时,我会得到-12而不是-4。我想这是因为我有三个答案,它循环三次..但我不知道如何才能使它只计算一次..

任何人都可以帮助我的方式吗?谢谢!

回答

1

假设你不需要知道给出最小Levenshtein距离的单词,你可以修改你的循环来找到最小的距离;

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... 
} 
+0

这确实看起来像一个更好的结构。我会试试这个!一个问题:你首先定义minDistance,然后你采用这个数字的最小值和我的Levenshtein类的一个新实例。你为什么这样做?如果问题只有一个答案,for循环不会给出错误? (或者你是否从头开始初始化它?) –