Este sitio web usa cookies de terceros para analizar el tráfico y personalizar los anuncios. Si no está de acuerdo, abandone el sitio y no siga navegando por él. ×


2.2.8. Declarar variables en un for

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.