2014-02-08 3 views
-2

Я использую этот итератор для класса платы, и теперь я хочу использовать стек, который я возвращаю в каком-то другом классе, где я хочу перебирать этот статический, как я могу его перебирать с помощью этого стека. Заранее спасибоКак использовать итератор Java через классы?

public Iterable<Board> neighbors(){ 
    Stack<Board> boardit=new Stack<Board>(); 
    int i=0,j=0; 
    for(i=0;i<N;i++){ 
      for(j=0;j<N;j++){ 
       if(this.board[i][j]==0) break; 
       } 
      } 
    if(this.validate(i-1, j)){ 
     Board ngh1=new Board(this.board); 
     int temp=ngh1.board[i][j]; 
     ngh1.board[i][j]=ngh1.board[i-1][j]; 
     ngh1.board[i-1][j]=temp; 
     boardit.push(ngh1); 
    } 
    if(this.validate(i+1, j)){ 
     Board ngh2=new Board(this.board); 
     int temp=ngh2.board[i][j]; 
     ngh2.board[i][j]=ngh2.board[i+1][j]; 
     ngh2.board[i+1][j]=temp; 
     boardit.push(ngh2); 
    } 
    if(this.validate(i, j-1)){ 
     Board ngh3=new Board(this.board); 
     int temp=ngh3.board[i][j]; 
     ngh3.board[i][j]=ngh3.board[i][j-1]; 
     ngh3.board[i][j-1]=temp; 
     boardit.push(ngh3); 
    } 
    if(this.validate(i, j+1)){ 
     Board ngh4=new Board(this.board); 
     int temp=ngh4.board[i][j]; 
     ngh4.board[i][j]=ngh4.board[i][j+1]; 
     ngh4.board[i][j+1]=temp; 
     boardit.push(ngh4); 
    } 

    return boardit; 
} 
+0

Просьба уточнить. Как вы собираетесь называть этот код? –

+0

, как будто я хочу запустить этот стек и вставить в очередь приоритетов после запуска некоторой операции на каждой из досок – user3154554

ответ

0

1) Просто вернуть Stack<Board> и не Iterable<Board>.
Это, если вы хотите, чтобы вызывающий код использовал результат
как Stack, а не только как Iterable.

public Stack<Board> neighbors() { ... }

В качестве альтернативы ...

2) В вызывающем коде сделать что-то вроде этого.

Iterator<Board> iter = neighbors().iterator(); 
while (iter.hasNext()){ 
    Board board = iter.next(); 
    // do something with board 
} 
+0

, но спецификация API требует использования Iterable , тогда как я могу это сделать – user3154554

+0

Тогда код вызова не должен быть пытаясь использовать его как стек, но как Итерабельный. В вашем вопросе и ваших требованиях есть противоречие. –

+0

Я не понимаю, пожалуйста, пожалуйста, elobarate – user3154554

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