Hola.
No hay una forma mejor o peor.
Sobre como lo escribiste tú:
fo (i = 0; i < 100; i++)
Y como lo escribí yo:
for (int i = 0; i < componentes.length; i++)
Hay dos diferencias.
1 - Yo declaro la variable i DENTRO del bucle, dentro de su condición.
Tú la declaras FUERA del bucle.
¿Qué es mejor o peor?
Bien, la diferencia es prácticamente irrelevante y hacerlo de una forma u otra depende más bien de las costumbres de cada uno.
A mucha gente cuando aprende programación se les enseña que TODAS las variables se han de declarar al principio del programa. Esto en general es buena práctica, aunque a mi me parece excesivo declararlas TODAS.
Está bien declarar al principio las más importantes e incluso acompañarlas de un comentario explicando cuál será su función dentro del programa.
Pero luego hay variables de menor importancia, como es el caso de la i que solemos usar como índice en los bucles for, que no veo necesario declararlas en primera línea, como si fueran de alta relevancia. Es una variable que no requiere explicación, todo el mundo sabrá que su función es incrementarse en el bucle for hasta que se cumpla la condición de salida.
Así que yo (y mucha gente) considero que basta con declararla al mismo tiempo que invocamos el bucle for.
Puede haber algún caso especial en que queramos poder acceder al valor de i cuando el bucle for haya terminado, entonce si que habrá que declararla FUERA y ANTES del bucle.
Si la declaramos como he hecho yo, la variable i desaparece cuando el bucle for ha terminado, y por tanto no podríamos consultar su valor después del bucle, en el caso de que necesitáramos hacerlo.
Pero ya te digo que no hay una forma más correcta que la otra, es principalmente una cuestión de costumbres.
2 - Tú marcas como condición de salida el valor 100.
Yo marco el valor que devuelva el atributo .length del array "componentes".
Para este ejercicio concreto, da un poco igual porque ya sabemos que la longitud del array "componentes" es 100, así que da lo mismo ponerlo de una forma o de la otra.
Sin embargo, es buena costumbre usar el atributo .length del array que vamos a recorrer.
La mayoría de las veces que escribamos un código para recorrer un array, este array puede ser un argumento que provenga de otra clase o programa distinto y no vamos a saber de antemano cuál es su longitud. Así que para que nuestro programa funcione, mejor acostumbrarnos ya a requerirle al array que nos indique él cuál es su longitud.
Luego además, para alguien que esté leyendo nuestro código, entenderá mejor la lógica que se está siguiendo.
En este caso, el programa es sencillo de entender.
Pero en un programa más complejo, con varios arrays y más líneas de código, alguien que vaya a leer el código a lo mejor no entiende por qué se ha puesto un
100 como condición del bucle for. Sabrá que ese bucle se va a repetir 100 veces, pero ¿por qué ese número concreto...?
Pues tendrá que revisar otras partes del código para que acabe adivinando el motivo.
En cambio, si desde el primer momento ve que la condición es
componentes.length.. pues enseguida le va a quedar claro que ese bucle for pretende recorrer ese array y que terminará cuando haya llegado hasta el último elemento, sea el número que sea, que seguramente le dará un poco igual saberlo.
Pero insisto de nuevo en que no hay una forma correcta o incorrecta.
Si el programa funciona bien de las dos formas, pues entonces las dos son correctas