Digamos que tengo una matriz que tiene 5 valores int[] gear = new int[] {5,4,3,2,1}; y también tengo una variable que uso para obtener el valor que quiero int currentGear = 0; Ahora me gustaría recorrer la matriz bajo una cierta condición con este código :

if(rpm > shiftRPM && currentGear < gear.Length)
  currentGear++;

Console.WriteLine( gear[cuurentGear] );

Sin embargo, al usar ese código, puedo ir más allá de la longitud de la matriz porque gear.Length es 5, pero las matrices están indexadas a cero (es decir, el número máximo que puedo tener es 4).

Entonces, mi solución es simplemente agregar 1 a currentGear en la declaración if, pero esto para bucles funciona como se esperaba:

for(int i=0; i<gear.Length;i++;)
  Console.Write(gear[i]);

Y salidas: 5 4 3 2 1 sin errores.

Además, si Console.Write(gear.Length); genera 5, entonces claramente mi error es con mi declaración if que permite que mi índice pase gear.Length desde 4 & lt; 5 y 5 está fuera de rango.

¿Hay una mejor manera de incrementar mi variable de índice de matriz que haciendo esto?

if(rpm > shiftRPM && (currentGear+1) < gear.Length)
  currentGear++;

¿O es esa la mejor manera de manejar esta situación?

-1
Xander Luciano 28 ene. 2016 a las 06:06

2 respuestas

La mejor respuesta

Su solución es básicamente la mejor manera. El valor máximo de un índice es de hecho Length-1, no Length, por lo que cuando solo verifica que currentGear es menor que Length, no se está protegiendo realmente de que se vuelva demasiado grande.

1
Tim Jasko 28 ene. 2016 a las 03:39

Por qué no inicializar currentGear como:

var currentGear = -1;
-1
Jose Luis 28 ene. 2016 a las 03:28