Archive for Java

Programa en Java:Numeros primos

Bueno pues en esta ocasión les traigo un pequeño programa en java en el cual obtendremos los números primos del 1 hasta el numero que queramos.
Lo que hace el usuario con el programa es escribir un numero que sera nuestro limite. El programa entonces desplegara todos los numeros primos del 1 hasta el numero que escribimos, si el numero que escribimos no es primo entonces no se desplegara.

Algoritmo:¿Como funciona?

El programa funciona de la siguiente manera:
Se tiene un limite, el cual es una variable que establece el usuario. Lo que se realiza es ir probando todos los numeros del 1 hasta ese limite si es primo o no. Cada numero que se encuentre que sea primo entre el 1 y nuestro limite sera desplegado en pantalla, aquellos que no lo sean seran ignorados.

¿Como determinar si un numero es primo o no?

Un numero primo es básicamente cualquier numero que solo sea divisible entre 1 y el mismo. Por lo tanto para determinar si un numero es primo, tomaremos el numero y lo dividiremos entre todos los números menores a este y mayores a 1, si todas estas divisiones tienen un residuo entonces el numero es primo. Es decir, que en ningun momento alguna división haya dado fruto a un numero entero sin residuo.

Veamos el codigo…

A continuación tenemos la clase Nprimos, esta clase tiene 2 metodos, el metodo iniciar() y el metodo esPrimo(), vemos que la clase iniciar tiene un parametro el cual es un numero que sera nuestro limite(hasta que numero quiero contar numeros primos), y el numero esPrimo() tiene un parametro que es un unico numero, el metodo determina si el numero es primo y regresa un valor de “true” o Verdadero si lo es, si el numero no es primo regresa un valor falso (false).

public class Nprimos {

public void iniciar(int limite)
{

for(int i=1;i<=limite;i++)

{

if(esPrimo(i))

{
System.out.println("Numero Primo:"+i);
}
}
}

public boolean esPrimo(int numero)
{
int aux;
for(int cont=2;cont<numero;cont++)
{
aux=numero%cont;
if(aux==0)
return false;
}
return true;
}
}

Descarga:

Aqui les dejo un Main.java para ejecutar el programa y la clase Nprimos en formato .java

Main.java
Nprimos.java

Espero les haya servido de algo, no olvides dejar tus comentarios.

 

Sockets en Java (cliente y servidor)

 

Sockets en Java

(el codigo fuente esta mas abajo…)

Los sockets son basicamente formas en las que podemos interconectar 2 (o mas) programas mediante el uso de la internet. En java se utilizan para poder crear conexiones utilizando basicamente una IP/hostname y un puerto para establecer la conexión. Para aprender podemos utilizarla para conenctar 2 programas por medio de Internet.

¿Como funciona?

El modelo mas basico de los sockets consta de 2 simples programas, un servidor y un cliente. Basicamente el programa servidor comienza a “escuchar” en un puerto determinado(nosotros lo especificamos), y posteriormente el programa que la hace de “cliente” debe conocer la ip o nombre de dominio/hostname del servidor y el puerto que esta escuchando, al saber esto simplemente solicita establecer una conexión con el servidor. Es aqui cuando el servidor acepta esa conexión y se puede decir que estos programas estan “conectados”, de este modo pueden intercambiar información. En el siguiente video muestro un programa servidor con sockets, explico mas o menos el codigo, en que consiste y hago una prueba en el cual la conexión es exitosa.

Video de Sockets en java

Notas:
*Ambos programas (servidor y cliente) no necesitan estar programados en Java, es posible programarlos en lenguajes de programación diferentes, o inclusive programar un servidor en java y utilizar un cliente ya existente que pueda conectarse a un puerto especificado.

*El cliente debe de conocer tanto el puerto a utilizar como la IP o dominio del servidor, mientras el servidor solo debe conocer el puerto de conexión

A continuación les dejo este código de un servidor muy simple que yo hice en Java, lo que hace es escuchar el puerto 5000, cuando un cliente se conecta este envía un mensaje de confirmación al cliente, luego el cliente al enviar su primer mensaje, el servidor envía un segundo mensaje y se cierra la conexión. También el de un cliente muy muy simple solo para que se vea la diferencia, de como se pide la conexión al servidor, el cliente únicamente envía un mensaje de texto pero no recibe información.

Codigo fuente del servidor

 

import java.net.*;

import java.io.*;

/**

*

* @author Jorge V

*/

public class Conex {

final int PUERTO=5000;

ServerSocket sc;

Socket so;

DataOutputStream salida;

String mensajeRecibido;

//SERVIDOR

public void initServer()

{

BufferedReader entrada;

try

{

sc = new ServerSocket(PUERTO );/* crea socket servidor que escuchara en puerto 5000*/

so=new Socket();

System.out.println("Esperando una conexión:");

so = sc.accept();
//Inicia el socket, ahora esta esperando una conexión por parte del cliente

System.out.println("Un cliente se ha conectado.");

//Canales de entrada y salida de datos

entrada = new BufferedReader(new InputStreamReader(so.getInputStream()));

salida = new DataOutputStream(so.getOutputStream());

System.out.println("Confirmando conexion al cliente....");

salida.writeUTF("Conexión exitosa...n envia un mensaje :D");

//Recepcion de mensaje

mensajeRecibido = entrada.readLine();

System.out.println(mensajeRecibido);

salida.writeUTF("Se recibio tu mensaje.n Terminando conexion...");

salida.writeUTF("Gracias por conectarte, adios!");

System.out.println("Cerrando conexión...");

sc.close();//Aqui se cierra la conexión con el cliente

}catch(Exception e )

{

System.out.println("Error: "+e.getMessage());

}

}

}

 

Codigo fuente cliente simple

 

 

import java.net.*;

import java.io.*;

/**

*

* @author Jorge V

*/

public class Conex {

final String HOST = "localhost";

final int PUERTO=5000;

Socket sc;

DataOutputStream mensaje;

DataInputStream entrada;

//Cliente

public void initClient() /*ejecuta este metodo para correr el cliente */

{

try

{

sc = new Socket( HOST , PUERTO ); /*conectar a un servidor en localhost con puerto 5000*/

//creamos el flujo de datos por el que se enviara un mensaje

mensaje = new DataOutputStream(sc.getOutputStream());

//enviamos el mensaje

mensaje.writeUTF("hola que tal!!");

//cerramos la conexión

sc.close();

}catch(Exception e )

{

System.out.println("Error: "+e.getMessage());

}

}

}

 

Espero que esta pequeña introducción a los sockets haya sido de ayuda, por favor deja tus comentarios{jcomments on}.

 

 

Tipos de datos

Como todo lenguaje de programación decente Java maneja diversos tipos de datos para diferentes usos. Por ejemplo cuando se realiza una operación matematica simple como la suma de 2 numeros, java necesita saber el tipo de datos que estará manejando a la hora de realizar dicha operación, en el caso de sumar dos números enteros como 1 + 2, java sabe que 1 y 2 son números enteros, así mismo se utilizan los tipos de datos para realizar operaciones especificas de acuerdo con lo que se necesite hacer en el programa. Hay que recordar que no es debido hacer operaciones entre datos que son de tipos diferentes o esto generara errores. Para comprender mas a fondo los tipos de datos que maneja java, primero debemos comprender que son los tipos de datos primitivos y tipos de datos referenciados.

Tipos de datos primitivos

Son aquellos que están integrados en el sistema operativo y no son objetos, los tipos de datos primitivos son los siguientes:

Numeros Enteros:

Tipo byte: Un byte se describe como 8 bits y se le pueden asignar valores numericos entre -128 y +127. Ej “byte dato1 = -5;”

Tipo Short: son numeros enteros pero con un numero maximo inferior a los integer, se declaran con la palabra reservada short. Ej. “short numero1;”Numeros

Tipo entero(Integer): declarados con la palabra reservada int. Ej.  ” int numero1;”

Tipo largo(long): declarados con la palabra reservada long. Ej “long numero5;”

Numeros reales:

Punto flotante(float): declarados con la palabra reservada float. Ej “float numero2;”

Tipo doble(double): declarados con la palabra reservada double. Comprenden un mayor rango de valores comparación con el tipo float. Ej “double numero3;”

Caracteres: declarados con la pablabra revervada char corresponden a los caracteres del codigo ASCII y pueden tomar valores numericos de tipo entero correspondientes al caracter ASCII. Ej “char caracter=’x'; char caracter2 = 5;”

Tipos de datos boolean y referenciados

Boolean:Los datos de tipo boolean se utilizan unicamente para expresar valores “verdadero” o “falso”(true, false), y se utilizan para referenciar condiciones. se declaran  de la siguiente manera. Ej ”  boolean condicion=true; boolean condicion2= false;”

Tipos de datos referenciados: Algo que hay que comprender de java es que los tipos de datos referenciados no estan integrados en el sistema operativo, y en realidad son objetos de java, entre los tipos de datos referenciados encontramos las cadenas de caracteres o datos de tipo String, arreglos, objetos, etc. Una manera de identificarlos es porque al momento de declararlos se utiliza la palabra clave para declarlos, esta comienza con letras mayusculas.

Aqui algunos ejemplos:

String cadena1="hola mundo";
String cadena2;
Object x;
Array arreglo1;

 

 

Arreglos en java

Arreglos:

Los arreglos se pueden definir como objetos en los que podemos guardar mas de una variable, es decir, al tener un unico arreglo, este puede guardar multiples variables de acuerdo a su tamaño o capacidad, es importante recordar que las variables guardadas deben ser del mismo tipo, por ejemplo: Si tenemos un arreglo de tipo Numerico que puede almacenar 10 variables, solo podra almacenar 10 numeros diferentes, no otras variables como caracteres o Strings.

Existen 2 tipos de arreglos, los unidimensionales, y los multidimensionales(generalmente 2 dimensiones y se les denomina matrices), en esta lección veremos como declarar y utilizar los arreglos unidimensionales, estos son mas sencillos y faciles de comprender, y pueden servirnos para muchas aplicaciones.

Declaración:

La estructura de declaración de un arreglo es la siguiente:

tipo_dedato [] nombre_variable;  //tambien puede declararse “tipo_dedato nombre_variable[];”

ejemplos:

String array[]; //donde array es un arreglo que guardara variables tipo Strings
double array2[]; //donde array2 es un arreglo que guardara variabels tipo double
int [] array3;   //donde array3 es un arreglo que guardara variables tipo int(numericas)

Video declarar arreglos en java:

Definir tamaño de arreglos:
Para asignar a un arreglo su tamaño o capacidad, se hace de la siguiente forma:

arreglo = new tipo_dedato[capacidad];

ejemplo:

array = new String[10];   //el arreglo array guardara hasta un maximo de 10 variables de tipo String

Para realizar una declaración de un arreglo y definir su tamaño en una misma linea se puede usar la siguiente estructura:

String array[] = new String[10];  //se declara un arreglo y se asigna su tamaño en una misma linea

Asignación de valores a elementos del array

Una vez se tiene declarado un arreglo, y al mismo se le ha asignado un tamaño o capacidad, podemos accesar a los datos dentro del mismo y asignarle valores. Para hacer esto es necesario proceder de la siguiente forma:

arreglo[indicador]=valor;

ejemplos:

array[0] = "Ejemplo"; //aqui se asigna el valor "Ejemplo" a un arreglo de String en su primera posicion
array2[3] = 5;      //se asigna un valor de 5 al 4to elemento de un arreglo numerico;

Es importante recordar que para accesar a los datos guardados en un arreglo se utilizan indicadores iniciando desde el “0”, si un arreglo tiene un tamaño de 10 variables, entonces se puede accesar a sus elementos con los indicadores del 0 al 9.

 

A continuaciòn un ejemplo mas completo:

int array1[]; //declaracion arreglo de tipo numerico

array1 = new int[3]; //tamaño del arreglo es 3 elementos

//asignacion de valores a elementos del arreglo;

array[0] =2;

array[1] = 10;

arra[2] = 7;

System.out.println("El valor de la posicion 1 en el arreglo es" + array[0]);

Fin del ejemplo:
Esperamos esta lección te haya sido de utilidad.{jcomments on}