Download 01-Intro_a_Java

Document related concepts
no text concepts found
Transcript
Java
• Java (1995) fue desarrollado en
Sun Microsystems por
James Gosling, Bill Joy y
Guy Steele
• Influenciado por C++
• Implementa clases, encapsulación, herencia
simple, polimorfismo, interfaces, garbage
collection

1
El Modelo Java
• Al compilar un programa Java, se genera un
código de máquina intermedio definido por
Sun, que recibe el nombre de bytecode

2
El Modelo Java
• El código bytecode es portable entre
diferentes plataformas

3
Tipos de Archivos Java
• Todo archivo define una clase o una interfaz
• Clase:
– Define e implementa un tipo de objeto
– Variables (representación)
– Procedimientos (funciones)
• estáticos (uno especial: main)
• y dinámicos (se ejecutan sobre un objeto)
• Interfaz
– Define la firma de un procedimiento

4
Un archivo básico para hacer un
programa que corra
public class MiClase {
static public void main(String[] args) {
Aqui van las instrucciones que se ejecutarán cuando se “eche a
correr” la clase
}
}
• El programa debe ser escrito en un archivo llamado MiClase.java
(MiClase es el nombre de la “clase” y lo inventa el programador, por
convención empieza con mayúscula
• Al compilarse se generará el archivo MiClase.class, que es el que
se ejecuta
• Si se cambia algo en el programa hay que compilarlo de nuevo para
que se refleje el cambio en el archivo class
5

Ejemplo 1
Programa lee dos números del teclado y dice cual es el
mayor y el menor SIN USAR INSTRUCCIONES CONDICIONALES
import java.util.*; //para usa Scanner
public class MiClase {
static public void main(String[] args) {
Scanner s = new Scanner(System.in);
System.out.print(″Numeros ? ″);
double n1 = s.nextDouble();
double n2 = s.nextDouble();
double m = (n1+n2)/2, mdif = Math.abs((n1-n2)/2);
System.out.println(″Menor = ″+(m+mdif));
System.out.println(″Mayor = ″+(m-mdif));
}
}

6
Ejemplo 2
Programa que lee un número entero que contiene una fecha
en formato aaaammdd y lo imprime como dd/mm/aaaa
import java.util.*; //para usa Scanner
public class CambiarFormatoFecha {
static public void main(String[] args) {
Scanner U = new Scanner(System.in);
System.out.print(“Fecha en aaaammdd : “);
int n = U.nextInt();
int a=n/10000, d=n%100, a=n%10000/100;
System.out.print(“Fecha en dd/mm/aaaa : “);
System.out.print(d+“/”+m+”/“+a);
}
}

7
Tipos, Valores y Variables
• Una variable en Java puede almacenar 2 tipos
de valores:
– Primitivos: variable corresponde a un nombre nemotécnico
de un lugar en la memoria donde está guardado el valor
– Referencias: variable corresponde a un nombre del lugar en
memoria que contiene la dirección donde está almacenado
el dato
• Variables primitivas y referencias son
fuertemente “tipeadas”

8
Tipos de Datos Primitivos
Tipo
Valores
boolean
true o false
char
Carácter Unicode (de 16 bits)
byte
Entero de 8 bits (con signo)
short
Entero de 16 bits (con signo)
int
Entero de 32 bits (con signo)
long
Entero de 64 bits (con signo)
float
Número flotante de 32 bits
double
Número flotante de 64 bits

9
Conversión de Tipos
• Java es fuertemente tipeado
– Chequea compatibilidad de tipos en tiempo de
compilación
– Permite hacer cast entre tipos
– Provee operadores para determinar el tipo de un
objeto en tiempo de ejecución

10
Conversión Implícita
• Cualquier valor numérico puede ser asignado
a una variable numérica que seoporte un
rango de valores más amplio
byte short
int long float double
más chico
más grande
• Ejemplo
int i = 1000;
double d = i;

11
Cast Explícito
• Cuando una conversión implícita no es
posible, un cast explicita la conversión a
realizar
• Sólo se permiten casts que tienen sentido

12
Cast de Tipos Primitivos
• Puede perderse precisión
double d = 20.5;
long l = (long) d;
System.out.println(l);
20
• Pueden perderse dígitos
long l = 1000000;
short s;
s = (short) l;
System.out.println(s);
16960

13
Funciones Matemáticas Predefinidas
import java.util.*; //para usa Scanner
public class Triangulo {
static public void main(String[] args) {
System.out.println(“triángulo:lados a,b, y angulo alfa”);
Scanner U = new Scanner(System.in);
System.out.println(“a b alfa ”),
double a = U.nextDouble(), b=U.nextDouble(),
alfa = U.nextDouble()* Math.PI/180;
double c = Math.sqrt(Math.pow(a * Math.sin(alfa),2)+
Math.pow(b - a * Math.cos(alfa),2));
System.out.println(“Perímetro=” + (a+b+c));
double s=(a+b+c)/2;
//semi-perimetro
System.out.println(“Area=“+Math.sqrt(s*(s-a)*(s-b)*(s-c)));
}
}

14
Funciones definidas en clase Math
función
sqrt(x)
pow(x,y)
exp(x)
log(x)
sin(x)
cos(x)
tan(x)
asin(x)
acos(x)
atan(x)
abs(x)
significado
 x, x  0
xy
ex
logex
seno de angulo x
coseno de x
tangente de x
arco-seno de x
arco-coseno x
arco-tangente x
|x|
max(x,y) mayor entre x e y
min(x,y) menor entre x e y
random() Nº al azar en [0,1[
arg*
double
double
double
double
double
double
double
double
double
double
int
double
int
double
int
double
resultado ejemplo
double
double
double
double
double
double
double
double
double
double
int
double
int
double
int
double
double
resultado
sqrt(4.0)
pow(2.0,3.0)
exp(1.0)
log(Math.E)
sin(Math.PI)
cos(Math.PI)
tan(Math.PI)
asin(1.0)
acos(1.0)
atan(0.0)
abs(-3)
abs(-3.0)
max(4, 6)
max(4.1, 6.5)
min(4, 6)
min(4.1, 6.5)
random( )
2.0
8.0
2.71...
1.0
0.0
1.0
0.0
Π/2
0.0
0.0
3
3.0
6
6.5
4
4.1
0.xxx..
..
Nota 1. un argumento double admite un int (int es asignable a double)
Nota 2. Se usan Math.nombre(argumentos), ejemplo: Math.pow(3.1, 4.3)
Métodos Estáticos
• Se identifican con el selector static
• Devuelven o no un resultado de un cierto
tipo
• Reciben un número determinado de
parámetros de tipo determinado
• Métodos de igual nombre pero con distinto
número o tipo de parámetros son métodos
distintos !

16
Métodos escritos y usados en la
misma clase
public class MiClase {
ststic public int mayor(int x, int y ) {
return (x+y)/2+Math.abs((x-y)/2);
}
static public int mayor(int x, int y, int z) {
return mayor(x,mayor(y,z));
}
static public void main(String[] args) {
System.out.println(mayor(5,4)+” “+mayor(2,3,4));
}
}

17
Métodos en otra clase
class F { //En archivo F.java
static public int aaaammdd(int x){
int d = x/1000000, m = x/10000%100, a = x%10000;
return a*10000 + m*100 + d;
}
static public int ddmmaaaa(int x){
int d = x%100, m = x/100%100, a = x/10000;
return a + m*10000 + d*1000000;
}
}
public class MiClase { //En archivo MiClase.java
static public void main(String[] args) {
int f1=15032015, f2=25052014; // fecha DDMMAAAA
System.out.println(“mayor=“+
Math.max( F.aaaammdd(f1), F.aaaammdd(f2)));
}
}
Sentencias de Control de Flujo
•
•
•
•
•
if / else
switch
for
while
do / while

19
If / if else
Ejercicio. Escribir un programa que establezca el siguiente
diálogo:
Nota? ___
Calificación = …
En que la calificación se determina de acuerdo a la siguiente
tabla:
Nota
1.0 – 3.9
4.0 – 4.9
5.0 – 5.9
6.0 – 7.0
< 1.0 o > 7.0
calificación
reprobado
aprobado
distinción
distinción máxima
fuera de rango

20
Solución 1: con if sin else
nota= unScanner.nextDouble();
System.out.print(“Calificacion=“);
if (1.0 <= nota && nota <= 3.9)
System.out.println(“reprobado”);
if (4.0 <= nota && nota <= 4.9)
System.out.println(“aprobado”);
if (5.0 <= nota && nota <= 5.9)
System.out.println(“distinción”);
if (6.0 <= nota && nota <= 7.0)
System.out.println(“distinción máxima”);
if (nota < 1.0 || nota > 7.0)
System.out.println(“fuera de rango”);
Nota. Siempre evalúa las 5 condiciones

21
Solución 2: con selección múltiple
if (1.0 <= nota && nota <= 3.9)
System.out.println(“reprobado”);
else if 4.0 <= nota && nota <= 4.9
System.out.println(“aprobado”);
else if 5.0 <= nota && nota <= 5.9)
System.out.println(“distinción”);
else if 6.0 <= nota && nota <= 7.0
System.out.println(“distinción máx”);
else
System.out.println(“fuera de rango”);
Nota. más eficiente (evalúa sólo hasta la 1ª condición
verdadera)

22
Solución 3: más breve y eficiente
(condiciones simples)
if (nota < 1 || nota > 7)
System.out.print(“Fuera de rango”);
else if (nota < 4)
System.out.print(“reprobado”);
else if (nota < 5)
System.out.print(“aprobado”);
else if (nota < 6)
System.out.print(“distinción”);
else
System.out.print(“distinción máxima”);

23
Operadores
Relacionales
>
>=
<
<=
==
!=
Mayor
Mayor o igual
Menor
Menor o igual
Igual
Distinto
Operadores
Lógicos
&&
||
!
and
or
not

24
Ejemplo diasMes
static public int diasMes(int m,int a){
if(m==1||m==3||m==5||m==7||m==8||m==10||m==12)
return 31;
else if(m==4||m==6||m==9||m==11)
return 30;
else if(m==2)//if(cond simple) sin else
if(bisiesto(a))
return 29;
else
return 28;
return 0;//mes incorrecto
}
static public boolean bisiesto(int x){
return x%4==0 && x%100!=0 || x%400==0;
}

25
switch
• Selección múltiple
• switch <expresión> debe
evaluar un int
• case <expresión> debe ser
un literal o un campo static
final
• break abandona el bloque
del switch (de otra manera
los siguientes cases son
ejecutados sin ser
evaluados)
• El bloque default es opcional
switch (<expresión>)
{
case <expresión>:
...
break;
case <expresión>:
...
break;
}
default:
...

26
Ejemplo diasMes Con switch
int d;
switch(x){
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 9:
case 10:
case 11:
case 12:
default:
}
return d;
d=31;
d=28;
d=31;
d=30;
d=31;
d=30;
d=31;
d=31;
d=30;
d=31;
d=30;
d=31;
d=0;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
Solución 2
int d=0;
switch(x){
case 1:case 3:case 5:case 7:case 8:case 10:case 12:
d=31; break;
case 4:case 6:case 9:case 11: d=30; break;
case 2: d=28; break;
}
return d;
alternativamente:
switch(x){
case 1:case 3:case 5:case 7:case 8:case 10:case 12:
return 31;
case 4:case 6:case 9:case 11: return 30;
case 2: return 28;
}
return 0;
while y do while
• Sintaxis 1: se ejecuta 0 o más veces
while ( condición )
{ sentencias }
• Sintaxis 2: se ejecuta 1 o más veces
do
{ sentencias }
while ( condición );

29
break
• break causa el fin del ciclo en el que se
encuentra
while ( condición ) {
sentencias…
if (condición de salida) {
break;
}
más sentencias…
}

30
continue
• continue causa el fin de la iteración actual y
el paso a la siguiente
while ( condición ) {
sentencias…
if (condición siguiente iteración) {
continue;
}
más sentencias…
}
(ver ejemplos instrucciones especiales)

31
Ejemplos
//tabla celsius – fahrenheit cada 5°C
int g=-20;
while(g<=40){
System.out.println(g+”ºC=“+(9.0/5.0*g+32)+”ºF”);
g=g+5;
}
//calculo de promedio de notas válidas
int suma = 0, n = 0;
Scanner U = new Scanner(System.in);
while(true) {
double x = U.nextDouble();
if (x == 0) break; // fin de datos
if (x < 1.0 || x > 7.0) continue;
suma += x; x++;
}
System.out.println(“Promedio = “+suma/n);
Operadores especiales
double suma, mayor, numero; int n;
suma = mayor = n = 0;
while((numero=U.nextDouble())!=0){
U.println(“prom=”+(suma+=numero)/ ++n);
mayor=max(numero,mayor);
}
U.println(“mayor=“+mayor);
static public double max(double x,double y){
return x>y ? x : y;
}
for
• Sintaxis
for (inicialización; condición; reinicialización)
{ sentencias ; (si es una sola se pueden omitir {}) }
inicialización y reinicialización pueden ser listas de
expresiones separadas por comas
for ( x=0; x < 10; x++ ) {
// ejecuta el bloque mientras x < 10
}
for ( x=0, y=0; x < 20; x++, y++ ) {
// ejecuta el bloque mientras x e y
}
< 20

34
Ejemplos de for
static public boolean primo(int x) {
if(x%2==0) return x==2;
for(int i=3; i<=(int)Math.sqrt(x); i+=2)
if(x%i==0) return false;
return true;
}
for(int i=1; i<=9; i+=2) {
System.out.println(“primos terminados en “+i);
for(int j=i; j<=100; j+=10)
if(primo(j)) System.out.println(j);
}

35