octubre 15, 2012

Operaciones con caracteres en matrices

El manejo de caracteres siempre es de mucha utilidad, sobre todo cuando trabajan con Autómatas. En este programa que hice, define algunos métodos para hacer operaciones con cierta cantidad de caracteres que los guarde en una matriz de 5x5. El programa es estructurado, muy bien comencemos.
    private static char arregloB[][];
    private static int filas = 5;
    private static int columnas = 5;
Pues como les había mencionado que el programa es estructurado, las variables son estáticas para que las pueda utilizar en el main sin necesidad de instancias, la primera variable es arreglo bidimensional de tipo char (solo esta declarado), la segunda es una variable de tipo entero y la llame fila (guarda las filas que tendrá la matriz) y por ultimo la tercera variable que también es de tipo entero y la llame columnas (guarda las columnas que tendrá la matriz).
public static boolean llenarArregloB(String cadena)
{
   //Checamos que los caracteres quepan en la matriz
   if(cadena.length() > (filas*columnas))
      return false;
   else
   {
      arregloB = new char [filas][columnas];
      int contador = 0;
   
      for(int i = 0; i < filas; i++)
      {
         for(int j = 0; j < columnas; j++)
         {
            if(contador < cadena.length())
            {
               arregloB[i][j] = cadena.charAt(contador);
               contador += 1;
            }
            else 
               break;
         }
      }
      return true;
   }
}
Define un método al que que llame llenarArregloB y este recibe de parámetro una cadena (en la que vienen todos los caracteres que el usuario introdujo), aquí en este método también inicializamos la matriz, y con dos for anidados procedemos a rellenar la matriz, pero como todos los caracteres viene en una sola cadena, utilizaremos el método charAt para pasarlos a tipo char.
public static void imprimir()
{
   for(int i = 0; i < filas; i++)
   {
      for(int j = 0; j < columnas; j++)
      {
         System.out.print(arregloB[i][j] + "\t");
      }
      System.out.println("");
   }
}
Con este método imprimiré la información de la matriz.
public static void ordenar()
{
   for( int i=0; i < filas; i++)
   {
      for( int j=0;j< columnas; j++)
      {
         for(int x=0; x < filas; x++)
         {
            for(int y=0; y < columnas; y++)
            {
               if(arregloB[i][j] < arregloB[x][y])
               {
                  char t = arregloB[i][j];
                  arregloB[i][j] = arregloB[x][y];
                  arregloB[x][y] = t;
               }
            }
         }
      }
   }
}
El método de ordenar lo que hace es ordenar los caracteres de forma ascendente (con base al codigo ASCII)

public static void ordenarAlReves()
{
   for( int i=0; i < filas; i++)
   {
      for( int j=0;j< columnas; j++)
      {
         for(int x=0; x < filas; x++)
         {
            for(int y=0; y < columnas; y++)
            {
               if(arregloB[i][j] > arregloB[x][y])
               {
                  char t = arregloB[i][j];
                  arregloB[i][j] = arregloB[x][y];
                  arregloB[x][y] = t;
               }
             }
          }
       }
   }
}
El método ordenarAlReves ordena los caracteres de la matriz de forma descendente (con respecto al código ASCII)
public static void contarMayusculas()
{
   Character c = null;
   int contador = 0;
   for(int i = 0; i < filas; i++)
   {
      for(int j = 0; j < columnas; j++)
      {
         if(c.isUpperCase(arregloB[i][j]))
            contador++;
      }
   }
   System.out.println("Hay " + contador + "Mayusculas\n");
}
El método contarMayuscula va a hacer un recorrido por la matriz y contara las mayúsculas que encuentre para imprimirlas en consola (solo imprimirá en numero de letras).
public static void contarMinusculas()
{
   Character c = null;
   int contador = 0;
   for(int i = 0; i < filas; i++)
   {
      for(int j = 0; j < columnas; j++)
      {
         if(c.isLowerCase(arregloB[i][j]))
           contador++;
      }
   }
   System.out.println("Hay " + contador + "Minusculas\n");
}
El método contarMinusculas va a hacer un recorrido por la matriz y contara las minúsculas que encuentre para imprimirlas en consola (solo imprimirá en numero de letras).
public static void convertirAMayusculas()
{
   Character c = null;
   char aux;
      for(int i = 0; i < filas; i++)
      {
         for(int j = 0; j < columnas; j++)
         { 
            aux = arregloB[i][j];
            arregloB[i][j] = c.toUpperCase(aux);
         }
      }
}
El método contarMayuculas va a hacer un recorrido por la matriz y contara todas las mayúsculas que encuentre (solo imprimirá el numero de mayúsculas).
public static void convertirAMinusculas()
{
   Character c = null;
   char aux;
   for(int i = 0; i < filas; i++)
   {
      for(int j = 0; j < columnas; j++)
      {
         aux = arregloB[i][j];
         arregloB[i][j] = c.toLowerCase(aux);
      }
   }
}
El método contarMinusculas va a hacer un recorrido por la matriz y contara todas las minúsculas que encuentre (solo imprimirá el numero de minúsculas).
public static void main(String[] args) 
{
  String cadena = JOptionPane.showInputDialog("Introduce los" 
                   + " caracteres a evaluar: ");
  llenarArregloB(cadena);
  System.out.println("La matriz queda de la sigueinte manera:");
  imprimir();
  System.out.println("\n Ordenamiento Ascendente: ");
  ordenar();
  imprimir();
  System.out.println("\n Ordenamiento Decendente: ");
  ordenarAlReves();
  imprimir();
  System.out.println("");
  contarMayusculas();
  contarMinusculas();
}
Ahora ya en en main, aquí le pediremos al usuario que introduzca los caracteres con un JOptionPane y mandaremos llamar al método llenarArregloB pasando le como parámetro la cadena y ya después solo tendremos que mandar llamar el método que queramos e imprimir.

código completo:
import javax.swing.JOptionPane;
/**
 * Archivo: Principal.java
 * @author BelloCercero
 * @since 13/10/2012
 */
public class Principal 
{
    private static char arregloB[][];
    private static int filas = 5;
    private static int columnas = 5;
    
    public static boolean llenarArregloB(String cadena)
    {
 if(cadena.length() > (filas*columnas))
     return false;

 else
 {
     arregloB = new char [filas][columnas];
     int contador = 0;
     
     for(int i = 0; i < filas; i++)
     {
  for(int j = 0; j < columnas; j++)
  {
      if(contador < cadena.length())
      {
   arregloB[i][j] = cadena.charAt(contador);
   contador += 1;
      }
      else 
   break;
  }
   }
     return true;
 }
 
    }
    
    public static void imprimir()
    {
 for(int i = 0; i < filas; i++)
 {
     for(int j = 0; j < columnas; j++)
     {
  System.out.print(arregloB[i][j] + "\t");
     }
     System.out.println("");
 }
    }
    
    public static void ordenar()
    {
 for( int i=0; i < filas; i++)
 {
     for( int j=0;j< columnas; j++)
     {
  for(int x=0; x < filas; x++)
  {
      for(int y=0; y < columnas; y++)
      {
   if(arregloB[i][j] < arregloB[x][y])
   {
       char t = arregloB[i][j];
       arregloB[i][j] = arregloB[x][y];
       arregloB[x][y] = t;
   }
      }
  }
     }
 }
    }
    
    public static void ordenarAlReves()
    {
 for( int i=0; i < filas; i++)
 {
     for( int j=0;j< columnas; j++)
     {
  for(int x=0; x < filas; x++)
  {
      for(int y=0; y < columnas; y++)
      {
   if(arregloB[i][j] > arregloB[x][y])
   {
       char t = arregloB[i][j];
       arregloB[i][j] = arregloB[x][y];
       arregloB[x][y] = t;
   }
      }
  }
     }
 }
    }
    
    public static void contarMayusculas()
    {
 Character c = null;
 int contador = 0;
 for(int i = 0; i < filas; i++)
 {
     for(int j = 0; j < columnas; j++)
     {
  if(c.isUpperCase(arregloB[i][j]))
      contador++;
     }
 }
 System.out.println("Hay " + contador + "Mayusculas\n");
    }
    
    public static void contarMinusculas()
    {
 Character c = null;
 int contador = 0;
 for(int i = 0; i < filas; i++)
 {
     for(int j = 0; j < columnas; j++)
     {
  if(c.isLowerCase(arregloB[i][j]))
      contador++;
     }
 }
 System.out.println("Hay " + contador + "Minusculas\n");
    }
    
    public static void convertirAMayusculas()
    {
 Character c = null;
 char aux;
 for(int i = 0; i < filas; i++)
 {
     for(int j = 0; j < columnas; j++)
     {
  aux = arregloB[i][j];
  arregloB[i][j] = c.toUpperCase(aux);
     }
 }
    }
    
    public static void convertirAMinusculas()
    {
 Character c = null;
 char aux;
 for(int i = 0; i < filas; i++)
 {
     for(int j = 0; j < columnas; j++)
     {
  aux = arregloB[i][j];
  arregloB[i][j] = c.toLowerCase(aux);
     }
 }
    }
    public static void main(String[] args) 
    {
 String cadena = JOptionPane.showInputDialog("Introduce los caracteres a evaluar: ");
 llenarArregloB(cadena);
 System.out.println("La matriz queda de la sigueinte manera:");
 imprimir();
 System.out.println("\n Ordenamiento Ascendente: ");
 ordenar();
 imprimir();
 System.out.println("\n Ordenamiento Decendente: ");
 ordenarAlReves();
 imprimir();
 System.out.println("");
 contarMayusculas();
 contarMinusculas();
    }
}




Cualquier duda dejen su comentario.

No hay comentarios.:

Publicar un comentario