22 enero 2012

Java para C# - 02 - Condiciones y bucles

Ahora vamos a ver una serie de cosas que sí se parecen mucho en C# y Java: la comprobación de condiciones y las estructuras repetitivas. Vamos a ver un único fuente en C# que use la mayoría de estas estructuras, junto con variables de tipo "int" y "char", y luego miraremos los (pocos) cambios al convertirlo a Java.


using System;

class CondicionesBucles
{
   
    public static void Main()
    {
        int num1=5, num2=-3;
       
        if (( num1 > 0) && (num2 > 0))
            Console.WriteLine ("Los dos numeros son positivos");
        else if (( num1 > 0) || (num2 > 0))
            Console.WriteLine ("Uno es positivo");
        else
            Console.WriteLine ("Ninguno es positivo");
           
        // ----------------
       
        char letter = 'e';
           
        switch(letter)
        {
            case 'A':
                    Console.Write("A Mayusc");
                    goto case 'a';
            case 'E':
            case 'I':
            case 'O':
            case 'U':
            case 'a':
            case 'e':
            case 'i':
            case 'o':
            case 'u':
                    Console.WriteLine("Es una vocal");
                    break;
            case '.':
                    Console.WriteLine("Es un punto");
                    break;
            default:
                    Console.WriteLine("No es vocal ni punto");
                    break;
        }
       
        // ----------------
        int a=3, b=-5;
        int cantidadDePositivos =
             (a>0) && (b>0)  ? 2
                :  (a>0) || (b>0)  ? 1 : 0;
        Console.WriteLine("Positivos: {0}",
            cantidadDePositivos);
           
        // ----------------
        int first = 5;
        int last = 12;
        int i;
       
        // --- for ---
        for (i = first; i <= last; i++)  {
            Console.Write("{0} ",i);   
           
        }
        Console.WriteLine();
       
        // --- while ---
        i = first;
        while ( i <= last)  {
            Console.Write("{0} ",i);   
            i++;
        }
        Console.WriteLine();
       
        // --- do...while ---
        i = first;
        do  {
            Console.Write("{0} ",i);   
            i++;
        }
        while ( i <= last);
        Console.WriteLine();

   }
}



En Java sería muy similar:


class CondicionesBucles
{
   
    public static void main( String[] args )
    {
        int num1=5, num2=-3;
       
        if (( num1 > 0) && (num2 > 0))
            System.out.println ("Los dos numeros son positivos");
        else if (( num1 > 0) || (num2 > 0))
            System.out.println ("Uno es positivo");
        else
            System.out.println ("Ninguno es positivo");
           
        // ----------------
       
        char letter = 'e';
           
        switch(letter)
        {
            case 'A':
                    System.out.print("A Mayusc");
            case 'E':
            case 'I':
            case 'O':
            case 'U':
            case 'a':
            case 'e':
            case 'i':
            case 'o':
            case 'u':
                    System.out.println("Es una vocal");
                    break;
            case '.':
                    System.out.println("Es un punto");
                    break;
            default:
                    System.out.println("No es vocal ni punto");
                    break;
        }
       
        // ----------------
        int a=3, b=-5;
        int cantidadDePositivos =
             (a>0) && (b>0)  ? 2
                :  (a>0) || (b>0)  ? 1 : 0;
        System.out.println("Positivos: "+
            cantidadDePositivos);
           
        // ----------------
        int first = 5;
        int last = 12;
        int i;
       
        // --- for ---
        for (i = first; i <= last; i++)  {
            System.out.print( i+" " );   
           
        }
        System.out.println();
       
        // --- while ---
        i = first;
        while ( i <= last)  {
            System.out.print( i+" " );   
            i++;
        }
        System.out.println();
       
        // --- do...while ---
        i = first;
        do  {
            System.out.print( i+" " );   
            i++;
        }
        while ( i <= last);
        System.out.println();

   }
}



Los parecidos son:

  • El tipo de datos "int" representa un número entero, igual que en C#, y se le pueden dar valores en el momento de declarar o después. El manejo del tipo "char" también es igual que en C#.
  • Las condiciones se pueden comprobar con "if" (sencillas), "switch" (múltiples) y con el operador condicional (abreviadas), con apenas una pequeña diferencia que comentaremos después.
  • Podemos repetir bloques de programa usando "for", "while" y "do-while", de igual manera que en C#.
Las diferencias (porque apenas hay dos que no nos hayamos encontrado antes):

  • Cuando un "case" de la orden "switch" delega en otro distinto, en Java no hace falta indicar "goto case": si no hay un "break" al final, el control pasa automáticamente al siguiente caso (lo que puede dar lugar a errores difíciles de descubrir en caso de que "olvidemos" algún "break").
  • Si queremos escribir varias cosas en pantalla usando una misma orden, no se usa {0}, {1} y sucesivos, pero podemos imitarlo formando una cadena de texto a partir de varios textos y números, concatenando todos ellos usando "+".


¿Y ahora qué? En la siguiente sesión hablaremos de las cadenas de texto y de cómo leer desde teclado, para pasar después a hablar de arrays y numeros aleatorios. Si surgen dudas, ya sabes: usa los comentarios o el foro de Java de AprendeAProgramar.