【问题标题】:Detecting Words mistakes in String Input检测字符串输入中的单词错误
【发布时间】:2012-11-11 00:44:21
【问题描述】:

我正在尝试编写一个代码,该代码可以检测用户输入中与存储在程序中的字符串数组有关的错误。

假设程序包含“快速棕色狐狸跳过懒狗”

如果用户输入“The quick brown is name over Jumps the lazy”

程序告诉用户您犯了 5 个错误。但是对于上述用户输入,我的代码无法正常工作。我的代码缺少什么来检测此类错误。代码如下:

public void checkTextCompleted()
{
    String input= text.getText();
    int temp=array[0],mistakes=0;

    if(input.length()==data.length()) {
        text.setEditable(false);
        text.setFocusable(false);

        for(int j=0;j<dataWords;j++) {
            int x = input.indexOf(data.substring(array[j]-temp, array[j]-1));

            System.out.println(x);
            if(x != -1) {
                String subs = input.substring(x, input.length());

                if(data.contains(subs)) {
                    break;
                } else {
                    mistakes++;
                    if(j!=0)
                        temp=array[j-1];
                    else
                        temp=array[j];
                }
            }
            else
                mistakes++;
        }
        JOptionPane.showMessageDialog(null,"You have made "+mistakes+" mistakes" , "Typing Test Completed", JOptionPane.OK_OPTION);
    }
}

array[] 包含程序内置 String(data) 中检测到空格的位置,dataWords 包含程序内置 String(data) 中的字数。用户输入存储在“输入”中

我的代码缺少什么来检测上述问题?

注意: 如果一个词错了,后面的字符串是对的,则错误为1,否则,将在同一主体上检测到下一个错误。

问候

【问题讨论】:

  • 什么时候有 1 个错误?你有什么要求?例如。 'a b' 而不是 'ba',这是 1 个还是 2 个错误? 'abc' 而不是 'cba'; 1 或 3 个错误?
  • 你到底想问什么?
  • 当用户输入“快速棕色狐狸跳过懒狗”或“快速棕色狐狸跳过懒狗”时出现1个错误。同样,当输入是“The QUik brown fox jmps over the lazy dog”时,也会出现 2 个错误。在 nut shall 在声明错误之前,我的程序会检查单词后面的子字符串,其索引是 find 当前
  • 所以每个单词最多有一个错误?
  • 是的,但错误单词后的其余输入字符串应与内置字符串匹配。

标签: java string swing


【解决方案1】:

我不了解您的所有代码,但是这样的解决方案有什么问题:

String[] expectedWords = "The quick brown fox".split(" ");
String[] inputWords = inputText.split(" ");
int mistakes = 0;
if (expectedWords.length != inputWords.length) {
    return;
}
for (int i = 0; i < expectedWords.length; i++) {
    if (!expectedWords[i].equals(inputWords[i])) {
        mistakes++;
    }
}
// Show number of mistakes.

【讨论】:

  • 您正在逐个字符地检查字符串,这可能会声明错误的错误数量。
  • 不是一个字一个字,一个字一个字!
  • 或者我不明白你的问题。如果数组元素各为一个单词,则输入 The FOO brown fox jumps over the lazy dog 将导致 1 个错误。
  • 实际上您正在考虑将 String 视为 char 数组。您的代码检查输入字符串数组是否等于内置字符串数组。
  • 这个The FOO brown fox jumps over the lazy dog应该导致1个错误吗? - 比我的代码是正确的。否则我不明白你的要求。
【解决方案2】:

你不能用这个简单的逻辑来缩小你的代码吗?

String[] expectedSentenceA = "The quick brown fox jumps over the lazy dog".split(" ");
String[] inputStringA = inputString.split(" ");
int diff=  expectedSentenceA.length-inputStringA.length;
if(diff>0) {
    System.out.println("You have missed " + diff + " word(s)..!!!");
} else if (diff < 0) {
    System.out.println("Found " + diff + " excess word(s)..!!!");
}else {
   ArrayList<String> mistakeWords= new ArrayList();
   for(int i=0;i<expectedSentenceA.length;i++) {
    if(!expectedSentenceA[i].equals(inputStringA[i])){
        mistakeWords.add(inputStringA[i]);
    }
   }
   JOptionPane.showMessageDialog(null,"Total Mistakes ["+mistakeWords.size()+"] are " + mistakeWords);
}

【讨论】:

  • 在比较之前必须检查 inputStringA 的大小
  • 感谢您向我展示了一种使用字符串的新方法。非常感谢您的帮助
  • 很好的实验。再试试。这是我使用 swing Java Swing Shuffle Game 完成的游戏示例
  • 如果输入字符串的长度小于内置字符串怎么办?如果输入字符串长度小于内置字符串长度,我正在考虑设置一个条件,然后检查循环将运行直到输入字符串的长度。还有其他更好的方法吗?
猜你喜欢
  • 2018-10-13
  • 2016-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-08
  • 2018-12-21
  • 1970-01-01
  • 2022-08-02
相关资源
最近更新 更多