2010-12-04 4 views
0

У меня возникли проблемы с поиском пар в строке размером пять. Таким образом, могут быть только две пары. Для каждой пары, которую я нашел, я должен увеличить счет на 2 очка. Вот что я до сих пор, но это неправильно.Поиск пар из пяти

String temp = "4 5 4 3 3"; 
    String tempLine = temp.replaceAll(" ", ""); 
    String[] hand = temp.split(" "); 
     for(int i = 0; i < hand.length; i++) 
        { 

         if(hand[i].equals(tempLine.substring(0, 1)) && i !=0) 
          score += 1; 
         if(hand[i].equals(tempLine.substring(1, 2)) && i != 1) 
          score += 1; 
         if(hand[i].equals(tempLine.substring(2, 3)) && i!= 2) 
          score += 1; 
         if(hand[i].equals(tempLine.substring(3, 4)) && i!= 3) 
          score += 1; 
         if(hand[i].equals(tempLine.substring(4)) && i != 4) 
          score += 1; 

        } 

EDIT: Я пытаюсь найти пары в руке, которые имеют сходное значение, например, 4 будет одна пара нашла в этой руке

+0

Можете ли вы дать еще какой-нибудь код? И еще одно объяснение того, что вы пытаетесь выполнить! – Michael 2010-12-04 20:38:07

ответ

1

Я думаю, что это подходит то, что вы пытаетесь сделать.

char[] hand = {'a','b','c','b','c'}; 
/* sort the hand to ensure pairs are next to each other */ 
for(int x=0;x<hand.length - 1;x++){ 
    for(int y=(x+1);y<hand.length;y++){ 
     if((int)hand[x] > (int)hand[y]){ 
      char temp = hand[y]; 
      hand[y] = hand[x]; 
      hand[x] = temp; 
     } 
    } 
} 
int score = 0; 
for(int x=0;x<hand.length - 1;x++){ 
    if(hand[x] == hand[x + 1]){ 
     score++; 
     /*if you want to make sure you only get pairs 
      add an "x++;" that way it'll skip over the 
      letter you just tested*/ 
    } 
} 
2

Сортировать руки первый и затем цикл, хотя искал рука [i] == рука [i-1]. Обратите внимание, что вам, возможно, придется быть немного умным, чтобы не считать наборы из 3s или 4s дважды, но это должно вас начать.

0

1) Почему вы не сравниваете элементы массива рук с другими элементами? Вы уже выполнили работу по интерпретации строки и созданию данных массива; используй это.

2) Есть более возможные пары элементов, чем это. Сложите пять подобных объектов в ряд перед вами на компьютере и попробуйте сами. Вы должны иметь возможность идентифицировать десять пар. Вы также должны иметь возможность идентифицировать шаблон для поиска/маркировки пар.

+0

Я пытаюсь найти пары в руке, имеющие аналогичное значение, например, 4 были бы одной парой, найденной в этой руке – 2010-12-04 20:44:01

2

Создайте действительный класс Hand и не используйте String s для представления своих карт. Оценка и Оденьте Card «s являются подходящими кандидатами для enum:

class Card { 
    enum Suite { ... }; 
    enum Rank { ... }; 

    private final Suite s; 
    private final Rank r; 

    // ... 
} 

class Hand { 
    private Card[] cards; 
    // ... 
} 

И сортировать Card[] в вашем Hand классе, что делает его легче оценить.

заказ Oracle, enum учебник, который имеет пример с картами: http://download.oracle.com/javase/1.5.0/docs/guide/language/enums.html

0

Этот пример ниже - это одна из возможностей подсчета пар. Вопрос в том, как он должен вести себя (увеличить оценку) в случае, если в строке или массиве есть три равных значения или что-то еще. Должно ли это считаться тремя парами или вообще не ...?

 
123 is in fact three combinations 12 && 13 && 23 
111 is in fact three combinations 11 && 11 && 11 
 


package edu.harris.pairs; 

public class FindPairs { 

    public static void main(String[] args) { 
    String s = "hello"; 
    int score = 0; 
    for (int i = 0; i < s.length() - 1; i++) { 
     for (int j = i + 1; j < s.length(); j++) { 
     if (s.charAt(i) == s.charAt(j)) { 
      score++; 
     } 
     } 
    } 
    System.out.println(score); 
    } 

} 

 

Надеется, что это помогает немного.

Смежные вопросы