Pregunta

Integer[] lastExchange = new Integer[nColors];
Integer[] exchangeToAdd = new Integer[nColors];
lastExchange = getValue();
exchangeToAdd = getValue(); 
exchanges.add(exchangeToAdd);

Integer[] newExchange = new Integer[nColors];
while (true) {
   newExchange = getValue(lastExchange);
   Integer[] exchangeToAddForLoop = new Integer[nColors];
   for (int i=0; i<nColors; i++) {
      lastExchange[i] = newExchange[i];
      exchangeToAddForLoop[i] = newExchange[i];
  }
  exchanges.add(exchangeToAddForLoop);
}

AÑADIDO

Lo que estoy tratando de hacer con este código? Necesito para poblar (rellenar) la lista llamada exchanges. El primer elemento de la lista es lastExchange. Mi problema con el código es que siempre que crear dos duplicados de una variable (es por eso que creo que el código no es elegante, pero no puedo encontrar una solución mejor). Por ejemplo, en el principio creo lastExchange y luego crear exchangeToAdd (que tiene el mismo valor que lastExchange). Lo mismo sucede en el bucle. Creo lastExchange y luego creo exchangeToAddForLoop. Lo hago porque no puedo añadir a la lista lastExchange porque va a ser modificado este último.

AÑADIDO 2

Aquí está mi problema. Tengo el código de esa manera:

Integer[] e  = getValue();
Integer[] e1 = getValue();  // <-- I do not like that.
exchanges.add(e1);          // <-- I do not like that.
while (true) {
   Integer[] e_new = getValue(e);
   Integer[] e2 = new Integer[nColors]; // <-- I do not like that.
   for (int i=0; i<nColors; i++) {
      e[i] = e_new[i];
      e2[i] = e_new[i]; // <-- I do not like that.
  }
  exchanges.add(e2); // <-- I do not like that.
}

y necesito e1 calcular y e2 adicionalmente al cálculo de e.

¿Fue útil?

Solución

Este es el código poco elegante en por lo menos dos maneras:

  • La mayor parte de sus variables locales están siendo asignados los valores que son inmediatamente sobrescritos
  • La variable de newExchange podría ser declarado más profundamente anidado.

Así que sin cambiar cualquier comportamiento, aquí está una versión más agradable:

Integer[] lastExchange = getValue();
Integer[] exchangeToAdd = getValue();
exchanges.add(exchangeToAdd);

while (true) {
   Integer[] newExchange = getValue(lastExchange);
   Integer[] exchangeToAddForLoop = new Integer[nColors];
   for (int i=0; i<nColors; i++) {
      lastExchange[i] = newExchange[i];
      exchangeToAddForLoop[i] = newExchange[i];
   }
   exchanges.add(exchangeToAddForLoop);
}

A continuación llegamos al problema de que no nos ha dicho lo que cualquiera de este código está destinado a hacer, ni qué quiere decir con "el problema duplicado variable local". Ah, y tan fuera de punta en los comentarios, el bucle nunca se termina.

Otros consejos

Sin discutir su código, cuando se tiene errores variables duplicados, siempre se puede utilizar {}.

Esto no compila

            int a=0;
            a++;


            int a=0;
            a++;

esto hace:

        {
            int a=0;
            a++;
        }
        {
            int a=0;
            a++;
        }

@ simplificación de Jon es el más seguro, sin embargo sospecho que se puede simplificar aún más.

exchanges.add(getValue());

while (true) { // forever??
   // do you need null values or can you use int[]
   int[] newExchange = getValue(exchanges.get(exchanges.size()-1);
   // do you need to add a copy, if not then clone() can be dropped.
   exchanges.add(newExchange.clone());
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top