2012-11-22 90 views
2

我正在嘗試製作一個代碼,可以檢測用戶輸入中與存儲在程序中的字符串數組有關的錯誤。檢測字符串輸入中的字錯誤

比方說,計劃中包含「敏捷的棕色狐狸跳過懶狗」

如果用戶輸入「敏捷的棕色是名在跳懶惰」

該程序會告訴你有用戶犯了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); 
    } 
} 

陣列[]包含在該程序中檢測到所述空間內置字符串(數據)的位置和數據字包含內建的字符串(數據)的程序的字的數量。用戶輸入存儲在「輸入」中

我的代碼缺少什麼來檢測上述問題?

注: 如果用一個詞是錯誤的,之後剩下的字符串是正確的,錯誤的將是1其他明智的,接下來的錯誤會在同一個主體進行檢測。

enter image description here

問候

+1

什麼時候出現1錯誤?你有什麼要求?例如。 'a b'而不是'ba',這是1或2個錯誤? 'abc'而不是'cba'; 1或3個錯誤? –

+0

你究竟在問什麼? –

+0

當用戶輸入「QUICK棕色狐狸跳過懶惰狗」或「QUi棕色狐狸跳過懶惰狗」時發生1個錯誤。類似地,當輸入是「The Falik brown Fox jmps over the lazy dog」時,會發生2個錯誤。在堅果應該宣佈一個錯誤之前,我的程序檢查單詞後的子字符串,其索引目前是 – Alfred

回答

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); 
} 
+0

必須在比較之前檢查inputStringA的大小 – vels4j

+0

謝謝您向我展示了一種使用字符串的新方法。非常感謝您的幫助 – Alfred

+0

良好的實驗。再試試。這裏是我使用swing [Java Swing Shuffle Game](http:// javabeginner。com/java-swing/java-swing-shuffle-game) – vels4j

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

您正在檢查可能聲明錯誤數量錯誤的字符。 – Alfred

+0

不是逐字,逐字! – jlordo

+0

或者我不明白你的問題。輸入'FOO棕色狐狸跳過懶狗'會導致1錯誤,如果數組元素是一個單詞。 – jlordo