sábado, 24 de diciembre de 2011

Feliz Navidad!!!

Bueno hacemos un breve descanso por las festividades, les deseo que pasen una feliz navidad a todos mis lectores y a los futuros lectores tmb jaja, que los éxitos sigan viniendo y que la paz llene sus hogares. Les desea su amigo David.


PDTA: Llegamos a las 1000 primeras visitas! Gracias a todos ustedes por visitar mi blog y estar siempre al tanto de mis publicaciones! Gracias nuevamente y que la sigan pasando muy bien en estas festividades y que tengan un próspero año nuevo...

Lenguaje Java - Ejercicios 1

Ejemplo de manejo de Archivos

El común ejemplo de yacaré!, si es el caso de un cocodrilo que puede estar en 10 posiciones y que tiene un dispositivo que le envia una señal a un computador y la posición la guarda en un archivo de texto, usted debe leer el archivo de texto y hallar la moda, contar cuantos dias estuvo en cada posición, etc.


Bueno la implementación es la siguiente:


import java.io.File;
import java.util.Scanner;


public class Yacare {
    public static void main(String ags[]){
       
        try{
           
          File archivo=new File("yacare.txt"); 
          Scanner scanner=new Scanner(archivo); 
          int aux;
          int pos[]={1,2,3,4,5,6,7,8,9,10};
          int dias[]={0,0,0,0,0,0,0,0,0,0};
// contadores empiezan con 0 dias
          while(scanner.hasNext()){
              aux=scanner.nextInt();
// leo un token del archivo
              for(int i=0;i<10;i++){
                if(aux==pos[i]){
// busco la posicion del token en pos[]
                  dias[i]=dias[i]+1;
// si lo encuentro le sumo 1 dia
                } 
              }   
          }
          int moda=dias[0];
// hallamos moda
          int posmoda=1;
           for(int i=0;i<10;i++){
                 if(dias[i]>moda){
// si se repite más q la moda
                     moda=dias[i];
                     posmoda=pos[i];
                    
                 }
           }  
          
          
        System.out.println("Pos"+"      "+"Dias");
            for(int i=0;i<10;i++){
                 System.out.println(pos[i]+"           "+dias[i]);
              }   
       
         
          System.out.println("Moda"+"      "+moda);
          System.out.println("Pos Moda"+"      "+posmoda);
        }catch(Exception s){
           
            System.out.println("Error!");
           
        }
       
       
    }
}

Lenguaje Java - Leccion 10

Archivos en Java

Con java también podemos procesar archivos de todo tipo, leerlos y escribir en ellos, en la lección de hoy veremos como procesar los archivos ".txt", si los archivos planos ( de texto ), para ello usaremos las librerías.

java.io.*;
java.util.Scanner;

En el manejo de archivos se usan las estructuras Try-Catch, nos indican que el código dentro del Try se debe intentar hacer y si ocurre un problema, hacer la parte del Catch.
try{
// hacer algo  y si pasa algo pasar al catch

}catch(Exception obj){ // pongan siempre Exception para cualquier error que ocurra
  // en caso de error en el try hacer lo que esta aqui
}

Escribiendo archivos:

 public void creaData(){
         //Crear un archivo
        try{
             File f=new File("Archivo1.txt");
            FileOutputStream fo=new FileOutputStream(f,true);
// ese true es para ver si se apila o se
//crea un archivo nuevo
            PrintWriter escribe=new PrintWriter(fo); // el objeto llamado escribe es el que usaremos
       
            escribe.println("1 2 3 4 5 6");
// escribimos los valores 1,2,3,4,5,6 separados por un espacio
//de linea y luego damos un salto de linea (println).
            escribe.println("Terminado"); // escribimos terminado
          for(int i=0;i<10;i++){
              escribe.println(""+(i+1));
// escribimos los numeros del 1 al 10
          }
        escribe.close();
//cerrar el archivo es necesario porque si no cierras no guarda
        //también puede usarse el método escribe.flush(); para guardar pero seguir editando
        }catch(Exception a){
            System.out.println("Error!");
        }
    }


*Los archivos se crean en la carpeta del proyecto del netbeans, en el caso que pongamos la ruta del archivo, lo encontraremos en esa ruta, ejm: File f=new File("C:\Archivo1.txt"); en ese caso el archivo estará en C:\, pero si lo dejamos asi File f=new File("Archivo1.txt"); el archivo respectivo estará en la carpeta del proyecto del netbeans.

Leyendo data de un archivo: Hablamos de token cuando nos referimos a 1 palabra separada por un espacio en blanco o un salto de linea, por ejemplo en " 2 3 4 5 asd 4234" hay 6 tokens.

public void leeArchivo(){
    
    //Lectura de archivos
         try{
             File f=new File("Archivo1.txt");
// leemos el archivo creado anteriormente
             Scanner sca=new Scanner(f);
// declaramos el objeto Scanner para leer
             String aux;
             while(sca.hasNext()){
// mientras tenga 1 token el archivo
                 aux=sca.next();
// leemos el primer token
                 System.out.println(aux);
// lo imprimimos en consola
             }
            
            
         }catch(Exception as){
             System.out.println("Error");
         }
        
    }

viernes, 23 de diciembre de 2011

Lenguaje Java - Leccion 9

Métodos de Búsqueda y Ordenamiento


En la lección de hoy veremos como implementar los métodos de búsqueda secuencial y búsqueda binaria y los ordenamientos por selección:

Búsquedas:

Búsqueda Secuencial: Recorre todo el arreglo comparando elemento por elemento, el método implementado nos da la posición del elemento en el arreglo.

public int BusquedaSecuencial(String[] a, String dato){ // recibe un arreglo de String y el dato a buscar
      
        for(int i=0;i<a.length;i++){
            if(a[i].equals(dato)){
// recorre todo el arreglo y si el elemento es igual al dato
                return (i);
// retorna la posición buscada
            }
        }
      return -1;
    }


Búsqueda Binaria: El arreglo debe estar ordenado antes de entrar al método, lo que hace es dividir el arreglo en 2 y ver si el dato se encuentra a la izquierda o a la derecha y así sucesivamente ir dividiendo hasta que lo encuentre o la longitud del salto sea 0 y no exista el elemento, el método implementado nos da la posición del elemento en el arreglo.


public int BusquedaBinaria(int[] a, int dato){
    
   //Suponiendo el arreglo ordenado
       int pos;
         int pos1=0;
       int pos2=a.length;
       int salto=pos2-pos1;
       salto =salto/2;
       while(salto>0){
          
           if(a[pos1+salto]==dato){
               return (pos1+salto);
           }else{
               if(a[pos1+salto]<dato){
                   pos1=pos1+salto;
               }else{
                   pos2=pos2-salto;
               }
           }
           salto=pos2-pos1;
           salto=salto/2;
       }
      
       return -1;
    }




Ordenamientos:


Burbuja: El método consiste en comparar todos los elementos contra todos, hace comparaciones y va intercambiando valores, el método da como resultado el arreglo de Strings ordenado.


public String[] OrdenaPorBurbuja(String a[]){
        String aux;  
        for(int i=0;i<a.length;i++){
                 for(int e=i;e<a.length;e++){
                     if(a[i].compareTo(a[e])>0){
                         aux=a[i];
                         a[i]=a[e];
                         a[e]=aux;
                     }
               
                }
            }
        return a;
    }




Ordenamiento por Selección:



public int[] OrdenamientoSeleccion(int b[]){
         int c[]=new int[b.length];
         int d[]=new int[b.length];
         int ultimomenor=0;
         for(int i=0;i<d.length;i++){
            d[i]=0;
         }
        int menor;
        int mayor=b[0];
        for(int i=0;i<d.length;i++){
            if(mayor<b[i]){
                mayor=b[i];
            }
         }
        for(int i=0;i<b.length;i++){
            menor=mayor;
            for(int e=0;e<b.length;e++){
                if(menor>b[e] && d[e]==0){
                    menor=b[e];
                    ultimomenor=e;
                }
            }
            d[ultimomenor]=1;
            c[i]=menor;    
        }
           
        return c;
    }


Lenguaje Java - Leccion 8

Trabajando con Consola

En java trabajamos con la consola con 2 métodos:

  • El popular System.out.println("---")
  • El Scanner para ingreso de Datos ( aunque hay varios para ingreso de datos, yo uso Scanner)
Salida de Datos por Consola:

Bien si queremos imprimir o mostrar por consola Java algunos datos, solo tenemos que invocar la siguiente linea de codigo:

System.out.println("Hola Amigos"); // es igual que el printf de C y el cout<< de C++

También se puede imprimir sin salto de linea: System.out.print("Hola Amigos");

Si queremos imprimir una variable entera concatenada con una cadena usamos el +:

String e="Mi edad es: ";
int edad=21;


System.out.println(e+edad);


Ingreso de Datos por Consola:

Usaremos la librería java.util.Scanner, esta librería trabaja igual que el scanf() de C y el cin>> de C++.


import java.util.Scanner;
public class Test{


public static void main(String args[]){

 Scanner lector=new Scanner(System.in);


String dato=lector.next(); // leemos 1 palabra por consola

int datoentero=lector.nextInt();  // leemos 1 número entero por consola

double datodecimal=lector.nextDouble(); // leemos 1 número decimal por consola

String linea=lector.nextLine();  // leemos 1 linea de palabras escrita en la consola


}


}

De esta manera controlamos los flujos de entrada y salida en Java, usando el System.out.println() y el Scanner.

Lenguaje Java - Leccion 7

Arreglos en Java

En Java encontramos diferentes tipos de arreglos, ya que hay infinitos objetos que podemos crear, por ejemplo si definimos una clase llamada "Alumno", podemos crear un ArrayList de alumnos, si creamos la clase "Cliente" podemos crear un arreglo de objetos de la clase Cliente, por otro lado también podemos crear arreglos de datos "primitivos" (int, double, char,boolean,etc).

Para los arreglos normales podemos definir el arreglo de esta manera:

int arreg[] =new int[14]; // arreglo con longitud 14

double arreg2[]=new double[15]; // arreglo de decimales con longitud 15

char arreg3[]={'a','e','i','o','u'}; // arreglo de caracteres

int arreg4[]={1,2,3,4,5,6,7,8}; // podemos definir el arreglo ya con sus elementos

arreg.length => para obtener el número de elementos del arreglo normal.

Para los arreglos de objetos usaremos la clase ArrayList y podemos definirlos de la siguiente manera:
-Necesitaremos esta libreria java.util.ArrayList;

Imaginemos que tenemos un programa para controlar los usuarios de una empresa:

Definimos la clase Usuario:

public class Usuario{

String usuario;
String clave;


public Usuario(){
}


}

 ----------------------------------------------------------


import java.util.ArrayList;
public class Test{


public static void main(String args[]){

  ArrayList<Usuario> usuarios=new ArrayList<Usuario>();


Usuario u=new Usuario(); // creamos 2 usuarios
Usuario u2=new Usuario();

 usuarios.add(u);   // añadimos los 2 usuarios al arrayList
 usuarios.add(u2);

usuarios.get(0).usuario="David";  // modificamos el primer usuario
usuarios.get(0).clave="12345";

usuarios.get(1).usuario="Gerardo";  // modificamos el segundo usuario
usuarios.get(1).clave="12345";


System.out.println("La cantidad de usuarios en el arreglo es: "+usuarios.size());

// usuarios.size() es igual al arreglo.length que nos da la longitud.

}


}

La diferencia en un arreglo normal y un ArrayList, es que el arreglo normal se tiene que definir su longitud al momento de declararlo, encambio un ArrayList te permite ir agregando y removiendo los elementos de una manera mucho más sencilla y que permite el manejo de Objetos de un modo muy deductivo.

martes, 20 de diciembre de 2011

Lenguaje Java - Leccion 6

Métodos
Segunda Parte

Bien, continuando con los métodos de un objeto ( de una Clase ), tenemos que pueden ser según su accesibilidad como privados y públicos, también pueden ser protected ( protegidos) pero eso lo veremos más adelante.

por ejemplo, si tenemos la siguiente clase:

public class Alumno {

 String nombre;


public Alumno(){
}


public setNombre(String n){ // un método que toma una variable n y se la pone en el atributo
//nombre
nombre=n;

}

}

Se puede llamar desde otra clase ya que el método setNombre es público:

public class Test{

public static void main(String args[]){

Alumno a1=new Alumno();
a1.setNombre("David");


}

}

Sin embargo si fuera definido el método así:


private setNombre(String n){
nombre=n;
}


En el método main no se podría llamar al método setNombre, pues Test es una clase que no se encuentra dentro de Alumno.


public static void main(String args[]){

 Alumno a1=new Alumno();
a1.setNombre("David"); ->error


}

Bien esa es la diferencia de usar los métodos como públicos o privados, espero que les quede claro la diferencia y que bueno en mi opinion, si tienes claro la estructura de tu sistema, los métodos públicos te garantizan un periodo de programación menor.