2012-11-22 3 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); 
    } 
} 

배열 []는 공간이 프로그램에 내장 문자열 (데이터)를 검출하는 위치와 dataWords 포함 문자열 (데이터) 내장 프로그램의 단어의 수를 포함 여기서 코드이다. 사용자 입력이 "입력"에 저장됩니다.

위에서 언급 한 문제를 감지하지 못한 코드는 무엇입니까?

참고 : 하나 개의 단어가 잘못과 후 나머지 문자열이 올바른 경우, 실수 한 다른 현명한, 다음 실수가 같은 주에 감지됩니다.

enter image description here

감사

+1

언제 실수입니까? 요구 사항은 무엇입니까? 예 : 'ba'대신 'a b'라고 쓰면이 1 ~ 2 번의 실수가 있습니까? 'cba'대신 'abc'; 1 개 또는 3 개의 실수? –

+0

당신은 실제로 무엇을 물어 보려고합니까? –

+0

사용자가 "Quick brown fox가 게으른 개로 점프"또는 "qui brown fox가 게으른 개로 점프"라고 입력하면 실수가 발생합니다. 유사하게 2 개의 실수는 입력이 "게으른 개 위에 QUik brown fox jmps"일 때 발생합니다. 너트에서 실수를 선언하기 전에 내 프로그램은 단어 뒤에 하위 문자열을 검사합니다. 색인은 현재 – 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

좋은 실험. 더 시도해보십시오. 다음은 스윙 [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 brown fox가 게으른 개로 점프하다'라고 입력하면 배열 요소가 각각 한 단어 씩 나오면 1 개의 오류가 발생합니다. – jlordo