Lecciones Java
Lecciones Java
Pgina 1
26/09/2015
EL LENGUAJE JAVA
El lenguaje Java fue creado por la empresa Sun Microsystems y en un corto perodo de
tiempo se convirti en uno de los lenguajes de programacin lderes.
Principales propiedades del lenguaje Java:
Lenguaje diseado para Internet, permite crear programas (applets) que se integran
en las pginas Web.
Puede ser usado como un lenguaje de programacin tradicional para crear lo que se
conoce como aplicaciones
Es un lenguaje multiplataforma (portable)
Tiene prestaciones multimedia (texto, imgenes, sonido, animaciones, etc)
Resulta un lenguaje familiar al tener una estructura similar a C++
Elimina dos de los problemas ms comunes con los que se encuentran los
programadores en C++: el uso de punteros, la gestin de memoria, y el control de
acceso a los elementos de una matriz
Es un lenguaje orientado a objetos
Es un lenguaje interpretado que integra el poder de los lenguajes compilados y la
flexibilidad de los interpretados
Se estima que es entre 10 y 20 veces ms lento que C++
Admite programacin concurrente
Es simple, robusto y seguro
Es un lenguaje accesible: a travs de Internet puede obtenerse de forma gratuita el
Kit de Desarrollo Java (JDK) de la empresa Sun Microsystems
A travs de Internet se puede acceder tambin a: Cursos interactivos, multitud de
ejemplos, herramientas para el desarrollo de applets, etc.
Ruth Carballo
Pgina 2
26/09/2015
Bibliografa:
Java 2. Manual de Programacin. L. Joyanes Aguilar, M. Fernndez Azuela. Mc Graw-Hill
2001. ISBN 84-481-3193-2
Manual Avanzado de Java. F. Lima Daz. Anaya Multimedia. 1998. ISBN 84-415-0517-9
Ruth Carballo
Pgina 3
26/09/2015
el programa
la documentacin (o ayuda)
C:>set PATH=%PATH%;C:\jdk1.3.1\bin
Ruth Carballo
Pgina 4
26/09/2015
C:> javac (confirmamos que se produce la respuesta Usage: javac <options> >source
files> etc)
Si salimos de la sesin MS-DOS (con exit) y abrimos una nueva, veremos que lo que
habamos aadido ha desaparecido, el PATH vuelve a ser el inicial.
Ampliacin permanente del PATH (Windows98)
Para que la ampliacin del PATH sea permanente la direccin a aadir debe escribirse
en el fichero de Windows Autoexec.bat
- accedemos al fichero con INICIO->EJECUTAR->SYSEDIT
- nos aparecer delante de todo la ventana Autoexec.bat
- en la instruccin PATH=... aadimos la direccin que nos interesa
- escribimos la instruccin
> set classpath = .
(Al escribir > javac filename.java se crear filename.class, que es el fichero
pseudocompilado. En el paso de ejecucin: >java filename se hace la llamada a
filename.class. La instruccin set classpath=. hace que el filename.class se
busque en el directorio dnde ejecutamos java.)
-
reiniciamos el ordenador
Ahora abriendo una ventana en MS_DOS, en cualquier momento, veremos que javac
funciona desde todas las direcciones.
Ruth Carballo
Pgina 5
26/09/2015
Little Editor
Professional
Abre la carpeta JcreatorPro2.0 . Pulsando dos veces sobre Setup.exe se instala el editor.
A continuacin se ejecuta el editor automticamente, apareciendo dos preguntas para
saber cual es el Java Home y donde est la documentacin. Una vez introducida esta
informacin podremos utilizar el editor JCreator desde cualquier carpeta, que nos
permitir escribir el programa java, compilarlo y ejecutarlo.
Si en la instalacin no nos ha aparecido informacin sobre el Java Home o el directorio
de la documentacin, habr que que darle estos datos manualmente a JCreator.
Al finalizar la instalacin nos aparece un icono JcreatorPro en el escritorio. Pulsando
dos veces sobre l y se abrir el editor. Seleccionamos CONFIGURE->OPTIONS>jdkprofiles
- Si ah aparece JDK version 1.3.1 es que est bien
- Si no aparece seleccionamos NEW y en el Select path que me ofrece escojo el
directorio C:\jdk1.3.1
En NEW tenemos dos pestaas, una para Classpath y otra de Documentacion. En la de
documentacin hay que aadir C:\jdk1.3.1\docs
Una vez metida esta informacin siempre que ejecute JCreator funcionar. No habr
que drsela cada vez.
Ruth Carballo
Pgina 6
26/09/2015
y como mtodos:
encender
(la variable de encendido pasa de off a on)
apagar
(la variable de encendido pasa de off a on)
disparar
(slo funciona si la variable encencido est en on, la variable nmero de
foto se incrementa en uno)
rebobinar , etc
Ruth Carballo
Pgina 7
26/09/2015
}
En este ejemplo vemos la plantilla de una clase con mtodo main. Lo que podra variar
se ha escrito en cursiva. Visto de otra forma, la plantilla de una clase que incluya
mtodo main es:
class*****{
publicstaticvoidmain(String[]*****){
instruccin1;
instruccion2;}
}
-
El filename.java deber ser HolaMundo.java, pus la clase que lleva el mtodo main
debe coincidir con el nombre del filename.java
Los nombres de las clases siempre se empiezan por maysculas (en azul dbil en
JCreator)
String[]args son los argumentos de entrada. String[]args define (o
declara o instancia) args como un objeto que es un array (lista) de cadenas de
caracteres. El objeto es cadena de caracteres por la clase String y es array por el
smbolo [].
Ruth Carballo
Pgina 8
26/09/2015
Ejecutando:
javacHolaMundo.java
javaHolaMundo
veremos que por pantalla se escribe
Hola
HolaPedro
Ruth Carballo
Pgina 9
26/09/2015
JDK Tools
Run Application
Seleccionar Default
Edit
Parameters
Activar (desactivar) la casilla de verificacin Prompt for main function arguments
Ruth Carballo
Pgina 10
26/09/2015
entero int
real
float,double
El compilador asigna espacio de memoria para almacenar cada variable con arreglo a su
tipo.
Todas las variables deben ser declaradas. No podemos escribir
hacerlo como:
floatc=2;
floatc;
c=2
(declaracin y asignacin)
c=2; debemos
(declaracin)
(asignacin)
Siempre que sea posible, es conveniente declarar una variable y asignarle su valor
inicial en un solo paso, ya que esta accin facilita la interpretacin del programa.
Las operaciones entre nmeros de dos tipos producen como resultados nmeros del tipo
superior (el orden entre los anteriores es int<float<double). As
inta=2;
intb=3;
floatc;
c=a/b;
c es cociente de dos enteros y ser por tanto un entero. 2/3 valdr 0. Aunque c est
declarada y almacenada cmo float el valor que le asigno es entero, porque a/b ser
entero. En este caso se est haciendo internamente una conversin automtica de tipos,
puesto que el entero 2/3=0 pasa a float como 0.0000000. Al pasar una variable numrica
de un nivel inferior a superior nunca perdemos informacin, ni la ganamos, slo
aadimos ceros.
Se puede realizar una conversin de tipos explcita mediante el operador cast o molde,
cambiando la categora de un tipo de nivel inferior a superior. Si hacemos
c=(float)a/b;
c es el cociente entre el float a y el entero b, y el resultado ser float. c valdr 0.6666667
Los nmeros decimales se escriben como +-**.*** . Estos nmeros son considerados
por Java como de tipo double, y deben declararse como double. Si queremos que un
nmero decimal se considere como float, debemos escribirlo como +-**.****f
Ruth Carballo
Pgina 11
26/09/2015
Ruth Carballo
Pgina 12
26/09/2015
La clase Integer proporciona un mtodo muy utilizado para convertir una cadena en
un nmero, que es el mtodo parseInt. Puede actuar sobre un objeto de la clase
Integer o directamente sobre la clase. Podemos escribir el mtodo con uno o dos
argumentos, el primero es una cadena de caracteres y el segundo un entero.
parseInt( cadena de caracteres, entero) o parseInt(cadena de caracteres)
intk1=Integer.parseInt("101");
intk2=Integer.parseInt("101",2);
System.out.println(k1+""+k2);
Ruth Carballo
k1 vale 2
Pgina 13
y k2 vale 2.
26/09/2015
Ruth Carballo
Pgina 14
26/09/2015
(Input
Stream
Reader
significa
Siempre que tenga que meter datos utilizando el teclado tendr que incluir la
instruccin anterior. Puedo variar el nombre teclado, pero lo dems es fijo.
- Integer.parseInt(teclado.readLine()); convierte el texto ledo por
importjava.io.*; Para leer datos tenemos que importar todas las clases del
paquete io (input-output) . Si no incluimos esta sentencia tendremos un error en
compilacin.
throwsIOException
Al leer datos por teclado estamos obligados a considerar el posible error por no
disponibilidad del teclado. En efecto, si el teclado no est disponible la operacin de
Ruth Carballo
Pgina 15
26/09/2015
entrada readLine dara error. El manejo del error que se suele implementar en el
cdigo consiste en enviar un mensaje por pantalla si el teclado no est disponible.
Por ahora no hemos estudiado el manejo de errores o Exceptions. Si no queremos
tratar el posible error debemos incluir el operador throwsIOException en el
mtodo main. Se puede comprobar que quitando ese operador del cdigo el
programa produce error en compilacin, avisndonos de la IOException.
Ruth Carballo
Pgina 16
26/09/2015
el nmero E
el valor de Pi
valor absoluto
arcocoseno de un ngulo en radianes
arcoseno
arcotangente
coseno
seno
tangente
e elevado al nmero
logaritmo neperiano de un nmero
a elevado a b
convierte un ngulo de radianes a grados
convierte un ngulo de grados a radianes
class Clasemath{
public static void main(String[] args){
double a=100;
double b=2;
double c=Math.PI/2;
double d=Math.PI/4;
double e=Math.toDegrees(d);
double raiz=Math.sqrt(a);
double log=Math.log(a);
double log10=Math.log(a)/Math.log(10);
double exp=Math.exp(a);
double elevar=Math.pow(a,b);
double coseno1=Math.cos(c);
double coseno2=Math.cos(d);
System.out.println(raiz);
System.out.println(log);
System.out.println(log10);
System.out.println(exp);
System.out.println(elevar);
System.out.println(coseno1);
System.out.println(coseno2);
System.out.println(e);
}
}
Ruth Carballo
Pgina 17
26/09/2015
declara a
igual
Distinto
Mayorque
Menorque
Mayoroigual
Menoroigual
1==2
1!=2
1>1
1<2
2>=0.2
2<=0.2
False
True
False
True
True
False
false
Ruth Carballo
Pgina 18
26/09/2015
2. Operadores lgicos
Los operadores lgicos o booleanos actan sobre operandos de tipo lgico para devolver
un resultado tambin de tipo lgico. Los dos ms inportantes son el operador y y el
operador o
&
class Compara{
public static void main(String[] args){
double a=3;
double b=4;
double c=5;
System.out.println(a<b & b<c );
System.out.println(a<b & c<b );
System.out.println(a==4.2 | b==4.2 | c==4.2 );
System.out.println(a==4 | b==4 | c==4 );
}
}
import java.io.*;
class CarnetJoven{
public static void main(String[] args) throws IOException{
BufferedReader teclado = new BufferedReader(new InputStreamReader(System.in));
System.out.print("nacimiento=?:");
int nacimiento=Integer.parseInt(teclado.readLine());
int n1=1978;
int n2=1988;
System.out.print(nacimiento>n1 & nacimiento<n2);
}
}
3.
Ruth Carballo
Pgina 19
26/09/2015
if(condicin)
sentencia;
if(condicin)
{ sentencia1;
sentencia2;.....}
if (nacimiento>n1 & nacimiento<n2)
System.out.println("carnet joven");
System.out.println("fin del programa");
if (nacimiento>n1 & nacimiento<n2)
{System.out.println("carnet joven");
System.out.println("enhorabuena");}
System.out.println("fin del programa");
Sintaxis de if-else para una sentencia o un bloque de sentencias
if(condicin)
{sentencia1;
sentencia2;}
else
{ sentencia3;
sentencia4;.....}
if
(nacimiento>n1 & nacimiento<n2)
{System.out.println("autorizado");}
else
{System.out.println("no autorizado");}
4.Ejercicios
Escribir una aplicacin que tome como datos un par de puntos P(x,y) y que determine el
ngulo en grados que forma el vector OP con la parte positiva del eje x.
Escribir una aplicacin que lea por pantalla un nombre y escriba por pantalla Hola
slo si el nombre es Pedro y Hello slo si el nombre es Peter.
Ruth Carballo
Pgina 20
26/09/2015
Soluciones:
import java.io.*;
public class angulos{
public static void main(String[] args) throws IOException{
BufferedReader teclado = new BufferedReader(new InputStreamReader(System.in));
double a = Double.parseDouble(teclado.readLine());
double b = Double.parseDouble(teclado.readLine());
double d;
double rad=Math.atan(b/a);
if (a>0 && b>0)
System.out.println(a + " " + b + " " + Math.toDegrees(rad));
if (a<0 && b>0)
{d = 180.+Math.toDegrees(rad);
System.out.println(a + " " + b + " " + d );}
if (a<0 && b<0)
{d = 180.+Math.toDegrees(rad);
System.out.println(a + " " + b + " " + d );}
if (a>0 && b<0)
{d = 360.+Math.toDegrees(rad);
System.out.println(a + " " + b + " " + d );}
}
}
import java.io.*;
public class bilingue{
public static void main(String[] args) throws IOException{
BufferedReader teclado = new BufferedReader(new InputStreamReader(System.in));
String str=teclado.readLine();
String str1="Peter";
String str2="Pedro";
if (str.equals(str1))
System.out.println("Hello");
if (str.equals(str2))
System.out.println("Hola");
}
}
Ruth Carballo
Pgina 21
26/09/2015
Leccin 9: Bucles
1. Operadores de incremento (decremento) y asignacin
++a
a++
--a
a--
a=a+1
a=a+1
a=a-1
a=a-1
int a = 5;
System.out.print( 2 + a)
System.out.println(2 + ++a);
por pantalla escribe 8
antes de ejecutarse la sentencia
System.out.println(a)
System.out.println(a++)
por pantalla escribe 6
despus de ejecutarse la sentencia
System.out.print(a)
class Incremento{
public static void main(String[] args){
double a=5;
System.out.println(2 + a );
System.out.println(2 + ++a);
System.out.println(a);
System.out.println(a++);
System.out.println(a);
}
}
2.
La sentencia for
El bucle for est diseado para ejecutar una secuencia de sentencias un nmero fijo de
veces. La sintaxis de la sentencia for es:
for (inicializacin ; condicin de terminacin ; incremento)
sentencias;
// puede ser ninguna, una sola sentencia o un bloque delimitado por {}
// y sern lo que se repita durante el proceso del bucle
Inicializacin: se inicializan la(s) variable(s) de control
Ruth Carballo
Pgina 22
26/09/2015
Ruth Carballo
Pgina 23
SOLUCIONES:
Bloque para calcular el factorial de un nmero utilizando el operador while
long k;
long pp=1;
int j=1;
while (j<=k)
{pp=j*pp;
j=j+1;}
System.out.prinln(pp);
26/09/2015
Ruth Carballo
Pgina 24
26/09/2015
longnmenos1=1;
longnmenos2=1;
longpp=0;
intj=3;
El primer valor de j es 3.
while(j<=k)
{pp=nmenos1+nmenos2;
nmenos2=nmenos1;
nmenos1=pp;
j=j+1;}
System.out.println(pp);
intj=3;
while(j<=k)
{pp=nmenos1+nmenos2;
nmenos2=nmenos1;
nmenos1=pp;
j=j+1;};
return(pp);}
La salida
fibo(k) es pp
Podemos fijarnos en la similitud con el nico otro mtodo que hemos visto, que es el
mtodo main.
Ruth Carballo
Escribamos
Pgina 25
26/09/2015
publicstaticvoidmain(String[]args){}
y ahora
longfibo(longk){ }
Mientras que el argumento de entrada del primer mtodo es un vector formado por
cadenas de caracteres, en el segundo caso es un entero largo
Mientras que el primer mtodo es void (no devuelve nada) el segundo devuelve
(return) un dato de tipo long.
Vamos a escribir una aplicacin que nos calcule y devuelva por pantalla F(k) utilizando
la funcin o mtodo fibo(long k)
import java.io.*;
class Fibonacci{
// mtodo main
public static void main(String[] args) throws IOException{
long a,fa;
BufferedReader teclado = new BufferedReader(new InputStreamReader(System.in));
System.out.print("a=?:");
a=Long.parseLong(teclado.readLine());
fa=fibo(a);
System.out.println(fa);}
// funcin para calcular la secuencia de Fibonacci
static long fibo(long k){
long nmenos1=1;
long nmenos2=1;
long pp=0;
int j=3;
while (j<=k)
{pp=nmenos1+nmenos2;
nmenos2=nmenos1;
nmenos1=pp;
j=j+1;};
return(pp); }
}
EJERCICIOS
1. Escribe una aplicacin que incluya la funcin de Fibonacci y que permita comprobar las
siguientes relaciones:
F(n+1)*F(n-1) - F(n)2 = (-1)n
F(2n+1) = F(n+1)2 + F(n)2
F(2n) = F(n+1)2 - F(n-1)2
F(n+p+1) = F(n)*F(p) + F(n+1)*F(p+1)
Ruth Carballo
Pgina 26
26/09/2015
2. Escribe una aplicacin que calcule el factorial de un nmero, introduciendo el bloque que
calcula el factorial como una funcin.
Ruth Carballo
Pgina 27
26/09/2015
Algoritmo
//
}
Ruth Carballo
Pgina 28
26/09/2015