2015-09-10 2 views
0

У меня есть 2d Arraylist (2d Arraylist, myBoard работает хорошо и проверено несколько раз для правильности) и хотел бы вернуть самую длинную последовательность из тех же элементов в списке. Если я позвоню myBoard.toString(), то результат выглядит следующим образом:Получение горизонтальной самой длинной последовательности элементов.

| 1| 2| 3| 4| 5| 6| 7| 8| 
    +---+---+---+---+---+---+---+---+ 
-2 | | | | | | | | | 
    +---+---+---+---+---+---+---+---+ 
-1 | | | | | | | | | 
    +---+---+---+---+---+---+---+---+ 
0 | | | | | | | | | 
    +---+---+---+---+---+---+---+---+ 
1 | A| A| A| | | | | | 
    +---+---+---+---+---+---+---+---+ 
2 | | | | | | | | | 
    +---+---+---+---+---+---+---+---+ 
3 | | | | | | | | | 
    +---+---+---+---+---+---+---+---+ 
4 | | | | | | | | | 
    +---+---+---+---+---+---+---+---+ 
5 | | | | | | | | | 
    +---+---+---+---+---+---+---+---+ 
6 | B| B| B| B| B| B| | | 
    +---+---+---+---+---+---+---+---+ 
7 | | | | | | | | | 
    +---+---+---+---+---+---+---+---+ 
8 | C| C| D| C| C| C| C| C| 
    +---+---+---+---+---+---+---+---+ 
9 | | | | | | | | | 
    +---+---+---+---+---+---+---+---+ 

Я знаю, что ArrayLists начинаются с 0 и имеют несколько других методов, которые обрабатывают этот случай. Но моя забота - мой код не работает, чтобы получить самую длинную последовательность с доски по горизонтали. Самая длинная последовательность в row 6, но она возвращает [(0,1,), (0,1,), (0,2,), (0,2,), (0,5,), (0,5,), (0,6,), (0,6,), (0,7,), (0,7,)]. Почему он возвращает [(0,1,), (0,1,), (0,2), (0,2), (0,5), (0,5,), (0, 6,), (0,6,), (0,7,), (0,7,)] ??

 public List<RowAndCol<T>> horizontalSequence(){ 
     ArrayList<RowAndCol<T>> myList = new ArrayList<RowAndCol<T>>(); 
     int max = 1; 
     int currentCount = 1; 

     for(int i = 0; i < myBoard.size(); i++){ 
      for(int j = 1; j < myBoard.get(i).size(); j++){ 
       if(myBoard.get(j - 1).equals(myBoard.get(j))){ 
        RowAndCol<T> tempObject1 = new RowAndCol<T>(i, j, myBoard.get(i).get(j)); 
        RowAndCol<T> tempObject2 = new RowAndCol<T>(i, j-1, myBoard.get(i).get(j-1)); 
        myList.add(tempObject1); 
        myList.add(tempObject2); 
        currentCount++; 
       } 
       else{ 
        if(currentCount > max){ 
         if(currentCount > myList.size()){ 
          max = currentCount; 
         } 
         currentCount = 1; 
        } 

       } 
      } 
return myList; 
     } 

RowAndCol класс имеет только конструктор, который принимает (int row, int col, T e), getters и toString() методу

public String toString(){ 
     String result = ""; 
     if(this.e instanceof String){ 
      String element = (String)this.e; 
      result = "(" + this.row + "," + this.col + "," + element + ")"; 
     } 
     else if(this.e instanceof Integer){ 
      Integer element = (Integer)this.e; 
      result = "(" + this.row + "," + this.col + "," + element + ")"; 
     } 
     else if(this.e instanceof Character){ 
      Character element = (Character)this.e; 
      result = "(" + this.row + "," + this.col + "," + element + ")"; 
     } 
     return result; 
     } 
+0

tempObject1 и tempObject2 являются тот же объект. У вас есть тот же самый элемент дважды в списке. Почему вы бы поставили два раза один и тот же элемент? –

+0

@ TheCodingMonk, я изменил его, но все же дает мне тот же результат, что и я упоминал –

ответ

0

Я думаю, что вам нужно, чтобы избавиться от else:

if(myBoard.get(j - 1).equals(myBoard.get(j))){ 
    RowAndCol<T> tempObject1 = new RowAndCol<T>(i, j, myBoard.get(i).get(j)); 
    RowAndCol<T> tempObject2 = new RowAndCol<T>(i, j-1, myBoard.get(i).get(j-1)); 
    myList.add(tempObject1); 
    myList.add(tempObject2); 
    currentCount++; 
} 

    if(currentCount > max){ 
      myList.clear() // Reset the list to get rid of the old elements 
      max = currentCount; 
     currentCount = 1; 

} 
+0

. Тот же результат :(@ TheCodingMonk –

+0

См. Редактирование. Вы тестируете 'currentCount> myList.size()', но это условие никогда не выполняется , –