el lenguaje java

Anuncio
Ruth Carballo
Página 1
14/11/2015
EL LENGUAJE JAVA
El lenguaje Java fue creado por la empresa Sun Microsystems y en un corto período de
tiempo se convirtió en uno de los lenguajes de programación líderes.
Principales propiedades del lenguaje Java:













Lenguaje diseñado para Internet, permite crear programas (applets) que se integran
en las páginas Web.
Puede ser usado como un lenguaje de programación tradicional para crear lo que se
conoce como aplicaciones
Es un lenguaje multiplataforma (portable)
Tiene prestaciones multimedia (texto, imágenes, sonido, animaciones, etc)
Resulta un lenguaje familiar al tener una estructura similar a C++
Elimina dos de los problemas más comunes con los que se encuentran los
programadores en C++: el uso de punteros, la gestión 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 más lento que C++
Admite programación concurrente
Es simple, robusto y seguro
Es un lenguaje accesible: a través de Internet puede obtenerse de forma gratuita el
Kit de Desarrollo Java (JDK) de la empresa Sun Microsystems
A través de Internet se puede acceder también a: Cursos interactivos, multitud de
ejemplos, herramientas para el desarrollo de applets, etc.
Ruth Carballo
Página 2
14/11/2015
Bibliografía:
Java 2. Manual de Programación. L. Joyanes Aguilar, M. Fernández Azuela. Mc Graw-Hill
2001. ISBN 84-481-3193-2
Manual Avanzado de Java. F. Lima Díaz. Anaya Multimedia. 1998. ISBN 84-415-0517-9
Ruth Carballo
Página 3
14/11/2015
Lección 1: Instalación del SetUp Developer Kit de Java
Ficheros de interés:
j2sdk-1_3_1-win.exe
j2sdk-1_3_1_doc.zip
el programa
la documentación (o ayuda)
Pulsando dos veces sobre el icono j2sdk-1_3_1-win se comienza la instalación.
Automáticamente se creará un directorio C:\ jdk1.3.1 con los subdirectorios
\bin
\lib
\demo
etc
Al directorio C:\jdk1.3.1 es a lo que se le llama Java Home
El programa queda instalado en C:\jdk1.3.1 y las instrucciones javac (compilación) y
java (ejecución) funcionarán únicamente en C:\jdk1.3.1\bin
En línea de comandos se podrá comprobar si el programa está bien instalado en la forma
siguiente:
Ejecutando
>javac en C:
obtendremos como respuesta que el comando es
desconocido. Pero ejecutando >javac
en C:\jdk1.3.1\bin obtendremos como
respuesta Usage: javac <options> <source files> etc . Los mensajes exactos dependen
de si se usa Windows 98 o 2000.
La ventana de línea de comandos es la ventana de MS-DOS. En Windows 2000 se
accede a ella en la forma PROGRAMAS->ACCESORIOS->SIMBOLO DEL
SISTEMA
Hasta ahora los comandos javac y java sólo funcionan en la dirección C:\jdk1.3.1\bin
Si queremos que funcionen desde cualquier dirección , la dirección C:\jdk1.3.1\bin
debe estar incluida en el parámetro PATH. “Path” se traduce al castellano como
“camino” o “senda”. Cuando WINDOWS tiene que realizar una aplicación busca el
programa en las direcciones dadas en PATH.
Ampliación del PATH para una sesión en MS-DOS
C:>PATH
(me enseña lo que hay en el path)
C:>set PATH=”%PATH%;C:\jdk1.3.1\bin”
(añade al PATH anterior el directorio
C:\jdk1.3.1\bin
en Windows2000 sin comillas)
C:>PATH (confirmamos que C:\jdk1.3.1\bin está en el PATH)
Ruth Carballo
Página 4
14/11/2015
C:> javac (confirmamos que se produce la respuesta Usage: javac <options> >source
files> etc)
Si salimos de la sesión MS-DOS (con exit) y abrimos una nueva, veremos que lo que
habíamos añadido ha desaparecido, el PATH vuelve a ser el inicial.
Ampliación permanente del PATH (Windows98)
Para que la ampliación del PATH sea permanente la dirección a añadir 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 instrucción PATH=... añadimos la dirección que nos interesa
- escribimos la instrucción
> set classpath = .
(Al escribir > javac filename.java se creará filename.class, que es el fichero
pseudocompilado. En el paso de ejecución: >java filename se hace la llamada a
filename.class. La instrucción set classpath=. hace que el filename.class se
busque en el directorio dónde ejecutamos java.)
-
reiniciamos el ordenador
Ahora abriendo una ventana en MS_DOS, en cualquier momento, veremos que javac
funciona desde todas las direcciones.
Instalación de la ayuda de Java
Se abre j2sdk-1_3_1-doc.zip
con Winzip, y se extrae en el directorio jdk1.3.1
Automáticamente aparecerá en jdk1.3.1 el subdirectorio /docs con la documentación y
un índice (fichero index.html)
Ruth Carballo
Página 5
14/11/2015
Lección 2: Instalación JCreator
JCreator es un editor de Java desde el cual podemos, además de editar el filename.java,
tener un acceso cómodo a la ayuda y realizar la compilación y ejecución del programa.
Carpetas de interés:
JcreatorLE2.0
JcreatorPro2.0
Little Editor
Professional
Es simple y licencia gratuita
Es más potente y tiene licencia gratuita para 30 días
Abre la carpeta JcreatorPro2.0 . Pulsando dos veces sobre Setup.exe se instala el editor.
A continuación se ejecuta el editor automáticamente, apareciendo dos preguntas para
saber cual es el Java Home y donde está la documentación. Una vez introducida esta
información podremos utilizar el editor JCreator desde cualquier carpeta, que nos
permitirá escribir el programa java, compilarlo y ejecutarlo.
Si en la instalación no nos ha aparecido información sobre el Java Home o el directorio
de la documentación, habrá que que darle estos datos “manualmente” a JCreator.
Al finalizar la instalación 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 pestañas, una para Classpath y otra de Documentacion. En la de
documentación hay que añadir C:\jdk1.3.1\docs
Una vez metida esta información siempre que ejecute JCreator funcionará. No habrá
que dársela cada vez.
Ruth Carballo
Página 6
14/11/2015
Lección 3: Primera aplicación
1. Edición, compilación y ejecución de un programa Java
1. Crear el fichero fuente filename.java. El fichero fuente contiene texto, escrito en
Java, que tu y otros programadores podéis entender. Se puede utilizar cualquier
editor de texto para crear y editar los ficheros fuente. Por ejemplo en Windows se
puede utilizar Notepad.exe (Bloc de Notas).
2. Compilar el fichero fuente en un fichero bytecode. El compilador toma el fichero
fuente y convierte el texto en instrucciones que la Máquina Virtual Java (Java VM)
puede entender.
> javac
filename.java
Si el programa no tiene errores, volveremos a obtener el prompt. El fichero
bytecode aparece en el directorio como filename.class
3. Ejecutar el programa contenido en el fichero bytecode. El intérprete Java instalado
en tu ordenador lee las instrucciones en bytecode y las traduce de forma que el
ordendador las entienda y pueda ejecutarlas (código binario).
> java
filename
2. Las clases en Java
El lenguaje Java se construye en bloques que son clases. Las clases tienen a su vez
variables ( también llamados campos o componentes) y métodos, recordando a las
clases de objetos reales.
Por ejemplo en una cámara de fotos podríamos considerar como variables de estado:
variable encendido
variable encendido del flash
variable de cargada o descargada
variable de número de foto
variable de niebla, etc
que puede tener el valor on o off
que puede ser on o off
on o off
de 1 a 36
y como métodos:
encender
(la variable de encendido pasa de off a on)
apagar
(la variable de encendido pasa de off a on)
disparar
(sólo funciona si la variable encencido está en on, la variable número de
foto se incrementa en uno)
rebobinar , etc
Ruth Carballo
Página 7
14/11/2015
El software de Java se escribe a base de la creación de clases, con sus variables y
métodos. Los objetos en Java no son más que ejemplos (también llamados instancias o
ejemplares) de las clases. Existen clases de las que no se pueden crear objetos, como
por ejemplo la clase System que veremos más adelante.
Toda aplicación Java tiene que tener al menos una clase con un tipo de método
denominado método main. Todas las “acciones” que se realizan en una aplicación
se escriben en el método main.
Un ejemplo de acción, una vez construida la clase CamaraFotografica, con sus variables
y sus métodos, sería la de “construir” una cámara concreta y en un estado concreto (por
ejemplo, apagada y en número foto 4), encenderla, disparar tres veces y apagarla.
Se llaman constructores de una clase a los métodos que permiten definir (instanciar) un
objeto concreto de una clase.
La sintaxis de los constructores suele ser así: Clase miclase = new Clase()
Cada clase se crea con sus constructores, que pueden ser más de uno.
En el paréntesis se incluyen los argumentos que usa el constructor, separados por
comas. Pueden existir constructores que no usen ningún argumento.
En Java tendremos clases ya construidas y clases que construiremos nosotros.
3. Ejemplo 1: Estructura de un programa aplicación en Java
class HolaMundo{
public static void main(String[] args){
System.out.println(“Hola”);}
}
En este ejemplo vemos la plantilla de una clase con método main. Lo que podría variar
se ha escrito en cursiva. Visto de otra forma, la plantilla de una clase que incluya
método main es:
class *****{
public static void main(String[] *****){
instrucción1;
instruccion2; }
}
-
El filename.java deberá ser HolaMundo.java, pués la clase que lleva el método main
debe coincidir con el nombre del filename.java
Los nombres de las clases siempre se empiezan por mayúsculas (en azul débil 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
símbolo [].
Args[0] es el primer elemento de la lista, args[1] el segundo, y así
sucesivamente. args es un objeto que se lee (o no se lee) en línea de comandos .
Ruth Carballo
-
Página 8
14/11/2015
System.out.println() es una forma típica de escribir una línea de salida por
pantalla. Entre paréntesis escribimos lo que queremos que se vea por pantalla.
System.out es el flujo de salida estándar. System es el nombre de una clase,
out el de una variable o componente de la clase, que es la salida, y println()
es un método que actúa sobre el componente de la clase.
Los métodos son llamados en general con la sintaxis: nombreObjeto.método,
nombreObjeto.nombreComponente.método, nombreClase.método
o nombreClase.nombreComponente.método, según actúen sobre el propio
objeto, sobre alguna de sus componentes o sobre la clase o alguna de sus
componentes.
Ejecutando:
 javac HolaMundo.java
 java
HolaMundo
Hola
veremos que por pantalla se escribe
4. Datos en la línea de comandos
class HolaPersona{
public static void main(String[] args){
System.out.println(“Hola ” + args[0]);}
}
 javac HolaMundo.java
 java
HolaMundo Pedro
veremos que por pantalla escribe
Hola Pedro
Si ejecutamos > Java HolaMundo el programa dará error en ejecución, puesto que la
aplicación tiene que escribir por pantalla args[0] y no le hemos dado ningún argumento de
entrada.
Si ejecutamos > Java HolaMundo Pedro Fernandez dará como salida por pantalla
Hola Pedro
Aunque ha recibido dos argumentos de entrada, sólo tiene que escribir por pantalla el primero.
5. ¿Como dar (no dar) la opción de incluir argumentos de línea de
comando en JCreato?
Configure
Options
JDK Tools
Run Application
Seleccionar Default
Ruth Carballo
Página 9
14/11/2015
Edit
Parameters
Activar (desactivar) la casilla de verificación “Prompt for main function arguments”
6. Incluir comentarios en el programa
// una línea
/* varias
lineas
*/
7. Ejemplo de construcción de objetos: objetos de la clase String
class Hola1{
public static void main(String[] args){
// construye una cadena vacía
String str=new String();
/* asigna contenido a la cadena. El contenido de una cadena
siempre debe estar entre comillas dobles*/
str="Hola";
System.out.println(str);}
}
class Hola2{
public static void main(String[] args){
// construye una cadena y le asigna contenido
String str=new String(“Hola”);
System.out.println(str);}
}
class Hola3{
public static void main(String[] args){
/* String es una clase muy utilizada, por lo que el lenguaje
Java permite instanciarla sin
utilizar new ni constructor String(....) */
String str=”Hola”;
System.out.println(str);}
}
Ruth Carballo
Lección 4.
básicas.
Página 10
14/11/2015
Variables numéricas. Operaciones aritméticas
Variables de tipo numérico
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:
float c=2;
float c;
c=2
(declaración y asignación)
c=2; debemos
o
(declaración)
(asignación)
Siempre que sea posible, es conveniente declarar una variable y asignarle su valor
inicial en un solo paso, ya que esta acción facilita la interpretación del programa.
Las operaciones entre números de dos tipos producen como resultados números del tipo
superior (el orden entre los anteriores es int < float < double). Así
int a=2;
int b=3;
float c;
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 cómo float el valor que le asigno es entero, porque a/b será
entero. En este caso se está haciendo internamente una conversión automática de tipos,
puesto que el entero 2/3=0 pasa a float como 0.0000000. Al pasar una variable numérica
de un nivel inferior a superior nunca perdemos información, ni la ganamos, sólo
añadimos ceros.
Se puede realizar una conversión de tipos explícita mediante el operador “cast” o molde,
cambiando la categoría 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 números decimales se escriben como +-**.*** . Estos números son considerados
por Java como de tipo double, y deben declararse como double. Si queremos que un
número decimal se considere como float, debemos escribirlo como +-**.****f
Ruth Carballo
Página 11
14/11/2015
Haciendo
float
a1=2.4; obtendremos error en la compilación,
porque al número 2.40000000000000 se le estaría haciendo pasar a 2.400000
También daría error de compilación esta serie de instrucciones:
double a1=2.4;
double a2=1.6;
float a3;
a3=a1/a2;
porque a1/a2 va a tener la precisión de double, y al convertirlo a float voy a
perder la precisión que tenía.
A continuación vemos un ejemplo de programa con las operaciones aritméticas básicas
de suma, resta, multiplicación y división.
public class Operaciones{
public static void main(String[] args){
int
a=2;
int
b=3;
int
c1,c2,c3;
float
c4;
double c5;
c1=a+b;
c2=a-b;
c3=a*b;
c4=((float)a)/b;
c5=((double)a)/b;
System.out.println("la suma es " + c1);
System.out.println("la resta es " + c2);
System.out.println("el producto es " + c3);
System.out.println("el cociente es " + c4);
System.out.println("el cociente es " + c5);
}
}
Ruth Carballo
Página 12
14/11/2015
Lección 5. La clase Number
Java permite utilizar los tipos simples int, float, double por razones de
rendimiento, pero Java tiene la clase Number y subclases de ésta como Integer,
Float y Double, que son las clases de respectivamente números enteros, números
reales con precisión sencilla, y números reales con doble precisión.
Veremos un programa donde los números son tratados como objetos de una clase.
Recordemos como las “strings” o cadenas de caracteres sólo existen en Java como
objetos, y no como variables de tipo simple. Sin embargo, vimos también que la
declaración y asignación puede realizarse similarmente a la que se realiza para las
variables de tipo simple, sin necesidad de utilizar el operador new y el constructor .
Esto es así por la misma razón de rendimiento: la clase String es muy utilizada y
define un tipo de datos.
Para construir objetos de las clases Integer, Float, Double, etc, subclases de
Number lo debemos hacer con el operador new y sus constructores.
class ClaseNumero{
public static void main(String[] args){
Integer i = new Integer(2);
Integer j = new Integer("33");
Double d1 = new Double(2.16);
Double d2 = new Double("-2.4316");
System.out.println(i + "
"+ j );
System.out.println(d1 + "
" + d2);
}
}
La clase Integer proporciona un método muy utilizado para convertir una cadena en
un número, que es el método parseInt. Puede actuar sobre un objeto de la clase
Integer o directamente sobre la clase. Podemos escribir el método 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)
int k1 = Integer.parseInt("101");
int k2 = Integer.parseInt("101",2);
System.out.println(k1 + " " + k2);
k1 vale 101 y k2 vale 5, que es el valor de 101 en base 2
Otro método es el de devolverme el valor del número:
Integer i = new Integer(2);
int k1
= i.intValue();
double k2 = i.doubleValue();
Ruth Carballo
k1 vale 2
Página 13
y k2 vale 2.
Double x = new Double(2.15);
double y1= x.doubleValue();
int
y2 =x.intValue();
y1 vale 2.15 e y2 vale 2
14/11/2015
Ruth Carballo
Página 14
14/11/2015
Lección 6: El programa pide datos por pantalla
import java.io.*;
public class OperacionesTeclado{
public static void main(String[] args) throws IOException{
int a=0,b=0;
double c;
BufferedReader teclado = new BufferedReader(new
InputStreamReader(System.in));
System.out.print("a=?:");
a=Integer.parseInt(teclado.readLine());
System.out.print("b=?:");
b=Integer.parseInt(teclado.readLine());
c=(double)a/b;
System.out.println("el cociente es " + c);
}
}
-
InputStreamReader es una clase que se encarga de convertir bytes en caracteres
(“Input
Stream
Reader”
significa
“Lector
del
flujo
de
entrada”).
InputStreamReader(System.in) se encarga de convertir en caracteres los
bytes leídos desde el teclado, ya que System.in es el teclado.
-
BufferedReader es una clase que produce un “texto” o “palabra” o “cadena de
caracteres” (String) a partir de la secuencia de caracteres.
A mi lector de datos de entrada, que los convierte en texto, lo llamo “teclado”, y es
un objeto definido así:
BufferedReader teclado = new BufferedReader(new
InputStreamReader(System.in));
Siempre que tenga que meter datos utilizando el teclado tendré que incluir la
instrucción anterior. Puedo variar el nombre “teclado”, pero lo demás es fijo.
- Integer.parseInt(teclado.readLine()); convierte el “texto” leído por
teclado hasta un retorno de carro, en un número entero.
-
import java.io.*; Para leer datos tenemos que importar todas las clases del
paquete io (input-output) . Si no incluimos esta sentencia tendremos un error en
compilación.
-
throws IOException
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 operación de
entrada readLine daría error. El manejo del error que se suele implementar en el
código consiste en enviar un mensaje por pantalla si el teclado no está disponible.
Ruth Carballo
Página 15
14/11/2015
Por ahora no hemos estudiado el manejo de errores o Exceptions. Si no queremos
tratar el posible error debemos incluir el operador throws IOException en el
método main. Se puede comprobar que quitando ese operador del código el
programa produce error en compilación, avisándonos de la IOException.
Ruth Carballo
Página 16
14/11/2015
Lección 7: La clase Math
La clase java.lang.Math proporciona una serie de constantes
y funciones de uso muy común en expresiones aritméticas. En
la tabla damos algunos ejemplos.
Math.E
Math.Pi
Math.abs()
Math.acos()
Math.asin()
Math.atan()
Math.cos()
Math.sin()
Math.tan()
Math.exp()
Math.log()
Math.pow(a,b)
Math.toDegrees
Math.toRadians
el número E
el valor de Pi
valor absoluto
arcocoseno de un ángulo en radianes
arcoseno
arcotangente
coseno
seno
tangente
e elevado al número
logaritmo neperiano de un número
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
Página 17
14/11/2015
Lección 8: Operadores relacionales
1. Operadores relacionales
En programación son importantísimas no sólo las variables numéricas sino también las
variables lógicas. En cuanto a variables numéricas hemos estudiado las de tipos int,
float y double.
Por ejemplo int a=2;
valor 2.
declara a
como variable de tipo entero y le asigna el
Los operadores relacionales o de comparación permiten comparar valores para
determinar su igualdad, desigualdad u ordenación, y el resultado de las expresiones en
las que intervienen es de tipo lógico. Las expresiones lógicas sólo pueden tomar dos
valores: true o false
==
!=
>
<
>=
<=
igual
Distinto
Mayor que
Menor que
Mayor o igual
Menor o igual
1==2
1!=2
1>1
1<2
2>=0.2
2<=0.2
False
True
False
True
True
False
La comparación de cadenas en Java mediante el operador “= =” no funciona en todos
los casos, por tanto para evitar la posibilidad de error se ha de utilizar el método
equals().
class Compara{
public static void main(String[] args){
double a=3;
double b=4;
System.out.println(a>b);}
}
Por pantalla veremos
false
Ruth Carballo
Página 18
14/11/2015
2. Operadores lógicos
Los operadores lógicos o booleanos actúan sobre operandos de tipo lógico para devolver
un resultado también de tipo lógico. Los dos más inportantes son el operador “y” y el
operador “o”
&
y
True & true = true
True & false = false
Flase & true = false
False & false = false
|
o
True | true = true
True | false = true
False | true = true
False | false = false
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. Las sentencias if e if-else
En todos los lenguajes de programación existen construcciones que permiten tomar
decisiones basadas en una condición. Para efectuar esta tarea Java dispone de las
sentencias if e if-else
Sintaxis de if para una sentencia o un bloque de sentencias
Ruth Carballo
Página 19
14/11/2015
if (condición)
sentencia;
if (condición)
{ 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 (condición)
{sentencia1;
sentencia2;}
else
{ sentencia3;
sentencia4;.....}
if
(nacimiento>n1 & nacimiento<n2)
{System.out.println("autorizado");}
else
{System.out.println("no autorizado");}
4. Ejercicios
Escribir una aplicación 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 aplicación que lea por pantalla un nombre y escriba por pantalla “Hola”
sólo si el nombre es Pedro y “Hello” sólo si el nombre es Peter.
Ruth Carballo
Página 20
14/11/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
Página 21
14/11/2015
Lección 9: Bucles
1. Operadores de incremento (decremento) y asignación
++a
a++
--a
a--
a=a+1
a=a+1
a=a-1
a=a-1
antes de ejecutarse la instrucción
después de ejecutarse la instrucción
antes de ejecutarse la instrucción
después de ejecutarse la instrucción
int a = 5;
System.out.print( 2 + a)
;
por pantalla escribe 7
System.out.println(2 + ++a);
por pantalla escribe 8
antes de ejecutarse la sentencia
System.out.println(a)
por pantalla escribe 6
System.out.println(a++)
por pantalla escribe 6
después de ejecutarse la sentencia
System.out.print(a)
++a hace que a valga a+1
a++ hace que a valga a+1
por pantalla escribe 7
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á diseñado para ejecutar una secuencia de sentencias un número fijo de
veces. La sintaxis de la sentencia for es:
for (inicialización ; condición de terminación ; incremento)
sentencias;
// puede ser ninguna, una sola sentencia o un bloque delimitado por {}
// y serán lo que se repita durante el proceso del bucle
Inicialización: se inicializan la(s) variable(s) de control
Ruth Carballo
Página 22
14/11/2015
Condición de terminación: se comprueba antes de cada iteración del bucle y éste se
repite mientras que la condición se evalúe como verdadera
El incremento se ejecuta después de que se ejecuten las sentencias y antes de que se
realice la siguiente prueba de la condición de terminación. Esta parte se utiliza para
incrementar o decrementar las variables de control.
En resumen, el bucle for comprueba si la condición de terminación es verdadera. Si la
condición es verdadera se ejecutan las sentencias del interior del bucle, y si la condición
es falsa, se saltan todas las sentencias del interior del bucle, es decir, no se ejecutan.
Cuando la condición es verdadera, después de ejecutarse todas las sentencias la variable
de control se incrementa.
Observaciones:
- Cada parte del bucle for es opcional, aunque los dos “;” deben escribirse
- Es frecuente que la(s) variable(s) de control de un for sólo se necesiten en el bucle,
en cuyo caso pueden declararse en la zona de inicialización.
Ejemplos:
class Clasefor1{
public static void main(String[] args){
for (int i=0; i<=10 ; i++)
{System.out.println(i);}
}
}
class Clasefor2{
public static void main(String[] args){
/* si queremos usar la variable i fuera del bloque for tenemos que declararla fuera del
bloque for */
int i;
for (i=0; i<=10 ; i++)
{System.out.println(i);}
System.out.println("hemos terminado, e i vale " + i);
}
}
Ejercicios
1. Crear una aplicación que calcule la tabla del 4, desde 1 hasta 20.
2. Crear una aplicación que calcule el factorial de un número natural.
3. Crear una aplicación que calcule el área de 10 círculos de radios 1,2,3,4,5,6,7,8,9,10
Ruth Carballo
Página 23
SOLUCIONES:
Bloque para calcular el factorial de un número 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);
14/11/2015
Ruth Carballo
Página 24
14/11/2015
Lección 10: Secuencia de Fibonacci
F(n+2) = F(n+1) + F(n) , donde F(1) = F(2) = 1
Los primeros 20 términos de esta sucesión son:
1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765
Mostramos un bloque de instrucciones de Java para calcular F(k) siendo k un entero
positivo mayor o igual a 3.
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;}
System.out.println(pp);
Queremos calcular F(k)
El primer valor de j es 3.
Desde j=3 hasta j=k, con incrementos +1, se
calcula F(j).
El último valor calculado es pués F(k)
A continuación vamos a convertir el bloque anterior en una función. La función que
denominaremos fibo( ) tendrá como argumento la variable long k, y como
salida, un entero tipo long que es fibo(k)= F(k)
La función se escribe en Java como un método. No es void ya que devuelve un valor.
El valor que se devuelve es lo que aparece dentro del paréntesis de la última instrucción,
que es return().
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);}
El primer long es para indicar que la salida
es de este tipo.
La salida
fibo(k) es pp
Podemos fijarnos en la similitud con el único otro método que hemos visto, que es el
método main.
Escribíamos
public static void main( String[] args) {
}
Ruth Carballo
y ahora
Página 25
14/11/2015
long fibo( long k ) { }

Mientras que el argumento de entrada del primer método es un vector formado por
cadenas de caracteres, en el segundo caso es un entero largo

Mientras que el primer método es void (no devuelve nada) el segundo devuelve
(return) un dato de tipo long.
Vamos a escribir una aplicación que nos calcule y devuelva por pantalla F(k) utilizando
la función o método fibo(long k)
import java.io.*;
class Fibonacci{
// método 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);}
// función 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 aplicación que incluya la función 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
Página 26
14/11/2015
2. Escribe una aplicación que calcule el factorial de un número, introduciendo el bloque que
calcula el factorial como una función.
Ruth Carballo
Página 27
14/11/2015
Lección 11: Vectores
Se declara el tipo de datos del vector
int[] datos;
significa que los datos son enteros
Se crea el vector, fijando su tamaño
datos = new int[3] ;
significa que el número de entradas es 3
Se puede declarar el tipo de datos del vector y crearlo en una sola instrucción
int[] datos1 = new datos1[4];
Todas las entradas valdrán cero. Si queremos asignarles valores tendremos que hacerlo
entrada por entrada
datos[0]=50;
datos[1]=51;
datos[2]=52;
Podemos en una sola instrucción declarar, crear y asignar valor.
int[] impares = {9,5,1,13,3,11,7};
Para visualizar por pantalla el contenido del vector
for (int i=0; i<impares.length;i++)
{System.out.print(impares[i]+ " ");}
Ordenación por selección de un vector
int menor;
for (int i=0; i<impares.length-1;i++) {
menor=i;
for (int j=i+1 ; j<impares.length;j++) {
if (impares[j] < impares[menor])
menor=j;};
Algoritmo

El vector tiene N elementos, que ordenamos
con el índice i.

Tomamos i=1 y buscamos el mínimo de i=1
aN

Intercambiamos para llevar el mínimo a la
posición i=1 y el valor de i=1 a donde estaba
el mínimo

Tomamos i=2, buscamos el mínimo de i=2 a
N e intercambiamos para llevar el mínimo a
la posición i=2 y el valor de i=2 a donde
estaba el mínimo
int auxi= impares[i];
impares[i]=impares[menor];
impares[menor]=auxi;
//para ver como se va modificando la ordenación
System.out.println("");
for (int pp=0; pp<impares.length;pp++)
{System.out.print(impares[pp]+" "); }

//
}
Repetimos el proceso hasta i=N-1
Ruth Carballo
Página 28
14/11/2015
Descargar