Eu quero ter duas variáveis de loop de tipos diferentes. Existe alguma maneira de fazer isto funcionar?
@Override
public T get(int index) throws IndexOutOfBoundsException {
// syntax error on first 'int'
for (Node<T> current = first, int currentIndex; current != null;
current = current.next, currentIndex++) {
if (currentIndex == index) {
return current.datum;
}
}
throw new IndexOutOfBoundsException();
}
first
? Não está declarado em lugar nenhum. É um membro da classe?Respostas:
A inicialização de uma
for
instrução segue as regras para declarações de variáveis locais .Isso seria legal (se bobo):
for (int a = 0, b[] = { 1 }, c[][] = { { 1 }, { 2 } }; a < 10; a++) { // something }
Mas tentar declarar os tipos distintos
Node
eint
como você deseja não é legal para declarações de variáveis locais.Você pode limitar o escopo de variáveis adicionais dentro dos métodos usando um bloco como este:
{ int n = 0; for (Object o = new Object();/* expr */;/* expr */) { // do something } }
Isso garante que você não reutilize acidentalmente a variável em outro lugar no método.
fonte
Você não pode gostar disso. Você usa várias variáveis do mesmo tipo
for(Object var1 = null, var2 = null; ...)
ou extrai a outra variável e a declara antes do loop for.fonte
Basta mover as declarações de variáveis (
Node<T> current
,int currentIndex
) para fora do loop e deve funcionar. Algo assimint currentIndex; Node<T> current; for (current = first; current != null; current = current.next, currentIndex++) {
ou talvez até
int currentIndex; for (Node<T> current = first; current != null; current = current.next, currentIndex++) {
fonte
não podemos inicializar os diferentes tipos de dados no loop for de acordo com seu design. Estou apenas dando um pequeno exemplo.
for(int i=0, b=0, c=0, d=0....;/*condition to be applied */;/*increment or other logic*/){ //Your Code goes here }
fonte