Se puede incluso declarar una nueva variable en el interior de "for", y esa variable dejará de estar definida cuando el "for" acabe. Es una forma de trabajar recomendable, para evitar un fallo frecuente: reutilizar variables pero olvidar volver a darles un valor inicial:
for (int i=1; i<=10; i++) ...
Por ejemplo, el siguiente fuente compila correctamente y puede parecer mostrar dos veces la tabla de multiplicar del 3, pero el "while" no muestra nada, porque no hemos vuelto a inicializar la variable "n", así que ya está por encima del valor 10 y ya no es un valor aceptable para entrar al bloque "while":
// Ejemplo_02_02_08a.cs
// Reutilizacion incorrecta de la variable de un "for"
// Introducción a C#, por Nacho Cabanes
using System;
public class Ejemplo_02_02_08a
{
public static void Main()
{
int n = 1;
// Vamos a mostrar la tabla de multiplicar del 3 con "for"
for (n=1; n<=10; n++)
Console.WriteLine("{0} x 3 = {1}", n, n*3);
// Y ahora con "while"... pero no funcionará correctamente
while (n<=10)
{
Console.WriteLine("{0} x 3 = {1}", n, n*3);
n++;
}
}
}
Si declaramos la variable dentro del "for", la zona de "while" no compilaría, lo que hace que el error de diseño sea evidente:
// Ejemplo_02_02_08b.cs
// Intento de reutilizacion incorrecta de la variable
// de un "for": no compila
// Introducción a C#, por Nacho Cabanes
using System;
public class Ejemplo_02_02_08b
{
public static void Main()
{
// Vamos a mostrar la tabla de multiplicar del 3 con "for"
for (int n=1; n<=10; n++)
Console.WriteLine("{0} x 3 = {1}", n, n*3);
// Y ahora con "while"... pero no compila
while (n<=10)
{
Console.WriteLine("{0} x 3 = {1}", n, n*3);
n++;
}
}
}
Esta idea sea puede aplicar a cualquier fuente que contenga un "for". Por ejemplo, el fuente 2.2.6a, que mostraba varias tablas de multiplicar, se podría reescribir de forma más segura así:
// Ejemplo_02_02_08c.cs
// "for" anidados, variables en "for"
// Introducción a C#, por Nacho Cabanes
using System;
public class Ejemplo_02_02_08c
{
public static void Main()
{
for (int tabla=1; tabla<=5; tabla++)
{
for (int numero=1; numero<=10; numero++)
Console.WriteLine("{0} por {1} es {2}", tabla, numero,
tabla*numero);
Console.WriteLine();
}
}
}
Ejercicios propuestos:
Ejercicio propuesto 2.2.8.1: Crea un programa que escriba 6 líneas de texto, cada una de las cuales estará formada por los números del 1 al 7. Debes usar dos variables llamadas "linea" y "numero", y ambas deben estar declaradas en el "for".
Ejercicio propuesto 2.2.8.2: Crea un programa que pida al usuario el ancho (por ejemplo, 4) y el alto (por ejemplo, 3) y escriba un rectángulo formado por esa cantidad de asteriscos, como en el ejercicio 2.2.6.2. Deberás usar las variables "ancho" y "alto" para los datos que pidas al usuario, y las variables "filaActual" y "columnaActual" (declaradas en el "for") para el bloque repetitivo.