2

プログラムに格納されている文字列配列に対して、ユーザー入力の誤りを検出できるコードを作成しようとしています。

プログラムに「怠惰な犬を飛び越える速い茶色のキツネ」が含まれているとしましょう

ユーザーが「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[] には、Program builtin String(data) 内のスペースが検出された位置が含まれ、dataWords には、プログラム組み込み String(data) 内の単語数が含まれます。ユーザー入力は「input」に格納されます

上記の問題を検出するために私のコードに欠けているものは何ですか?

注: 1 つの単語が間違っていて、その後の残りの文字列が正しい場合、間違いは 1 になり、それ以外の場合、次の間違いは同じプリンシパルで検出されます。

ここに画像の説明を入力

よろしく

4

2 に答える 2

1

この単純なロジックでコードを縮小できませんか?

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);
}
于 2012-11-22T15:46:45.140 に答える
0

私はあなたのコードをすべて理解しているわけではありませんが、次のようなソリューションの何が問題なのですか:

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.
于 2012-11-22T15:28:42.733 に答える