2013-04-12 2 views
1

Привет Я пытаюсь найти совпадения между двумя строковыми массивами с помощью вложенных циклов. Однако, похоже, он зациклился еще раз.Сравнение двух строковых массивов с циклами Nested For

for(int i = 0; i < ca; i++) //ca contains 10 
{ 
    for(int j = 0; j < ra; j++) //ra contains 10 
    { 
     if(cAnswers[i].equals(rAnswers[j])) 
     { 
      count++; //Increments count to indicate a match 
      System.out.println("The current count: " + count); //To check the count 
     } 
    } 
} 
System.out.println("The number of correct questions is " + count + "/10"); //The result currently gives me 50/10 no matter what. 

Я попытался с помощью < = вместо того, чтобы просто <, но в конечном итоге получить индекс вне границ.

+0

Каковы возможные значения в cAnswers и rAnswers? Кажется, что-то похожее на ответы типа MCQ. Если это так, как только cAnswers [i] что-то подходит, разве вы не выходите из внутреннего цикла и не переходите к следующим cAnswers? – devang

+0

У ваших спичек должен быть тот же самый индекс, или это не имеет значения? – jlordo

ответ

3

Для каждого ответа в cAnswer, вы будете на все ответы в rAnswer.

String rAnswer[] = {"A", "B", "A", "D", "A", "F", "G", "H", "I", "J"}; 

И

String cAnswer[] = {"A", "B", "A", "D", "A", "F", "G", "A", "I", "A"}; 

Это будет соответствовать cAnswer[0] со всеми A's в rAnswer, увеличивающиеся count на 3. Аналогично, для cAnswer[2] будет снова соответствовать всем A's в rAnswer начиная с индекса 0. Это то, что вы хотите?

Если вы хотите сделать линейный матч, т.е. cAnswer[0] с rAnswer[0] один цикл является достаточным ..

for(int i = 0; i < cAnswers.length && i < rAnswers.length; i++) 
{ 
    if(cAnswers[i].equals(rAnswers[i])) 
    { 
     count++; //Increments count to indicate a match 
     System.out.println("The current count: " + count); 
    } 
} 

Если вы хотите сделать что-то еще, помогите нам помочь вам, предоставляя более подробную информацию.

+0

Привет, я только хотел сопоставить cAnswer [0] с rAnswer [0]. Я думал, что для доступа к каждому элементу мне нужны вложенные петли. Достаточно вашего ответа, и он работает так, как сейчас. спасибо – user1832478

0

Не нужно вложенных циклов для этого:

for(int i = 0; i < cAnswers.length && i < rAnswers.length; i++) 
{ 
    if(cAnswers[i].equals(rAnswers[i])) 
    {       //^
     count++; //Increments count to indicate a match 
     System.out.println("The current count: " + count); 
    } 
} 
2

приятнее решение:

Set<String> set = new HashSet<>(Arrays.asList(cAnswers)); 
set.retainAll(Arrays.asList(rAnswers)); 
System.out.println("The number of correct questions is " + set.size() + "/10"); 
Смежные вопросы