11
Introducción
Clase Principal{ Método Principal ()
{....} Método1() {....} Método2() {....} :
}
Clase1{ Variables Clase1 Constructores Clase1 Métodos Clase1
}
Clase2{ Variables Clase2 Constructores Clase2 Métodos Clase2
}
Etc...
22
Introducción
Clase Principal{ Método principal () {....} Método1() {....} Método2() {....} :}
33
Primer Programa en Java
class Saludo{ //Este programa imprime Bienvenidos a ING1310
public static void main(String[] args){
System.out.println("Bienvenidos a ING1310!");}
}
44
Primer Programa en Java
class Saludo{ public static void main(String[] args)
{System.out.println("Bienvenidos a
ING1310!");}
}
Clase Principal{ Método Principal () {....} Método1() {....}
}
...
55
Primer Programa en Java
class
Todos las instrucciones en Java deben estar contenidas en una clase.
Todo programa Java consiste en al menos una declaración de clase definida por el programador.
66
Primer Programa en Java
Saludo Este es el nombre de la clase. Se estila que los
nombres de las clases empiecen con mayúscula.
Debe consistir en letras, dígitos, underscores (_) y el signo $.
No debe comenzar con un dígito y no debe contener espacios.
Java distingue entre mayúsculas y minúsculas. Por ejemplo, no es lo mismo “Saludo” que ‘saludo’.
77
Primer Programa en Java
{}
El principio y el fin de cualquier sección en Java deben estar indicados por llaves.
En este caso tenemos dos secciones. La primera es la clase y la segunda es el método principal.class Saludo{ public static void main(String[] args)
{System.out.println("Bienvenidos a ING1310!");
}}
88
Primer Programa en Java
// Este programa..... Indica un comentario. Los comentarios son ignorados por el compilador. Usamos // si el largo del comentario es de menos de una línea. De lo contrario
podemos usar /* para indicar el principio del comentario y */ para indicar el final.
class Saludo{ /* Este programa imprime en pantalla el mensaje: Bienvenidos a ING1310 */
public static void main(String[] args){
System.out.println("Bienvenidos a ING1310!");}
}
99
Primer Programa en Java
public static void main(String[] args)
Este es el método principal. Este es el método que guía la ejecución del programa.
Típicamente, (el cuerpo de) un método está compuesto por una o más oraciones que son las que efectivamente ejecutan la tarea del método.
Más adelante veremos lo que significan las palabras y símbolos que forman el encabezado de este método.
1010
Primer Programa en Java
System.out.println("Bienvenidos a ING1310!"); Toda esta línea (hasta el punto y coma) es una oración.
println es un método que imprime en cualquier tipo de salida. Por ejemplo la pantalla del computador, una impresora etc. En este caso en pantalla aparecerá:
Bienvenidos a ING1310
Todas las oraciones en Java deben terminar con punto y coma, de lo contrario el programa tendrá un error y no podrá ser ejecutado.
1111
Primer Programa en Java
Veamos que pasa si :• Agregamos o quitamos espacios.
• Cambiamos mayúsculas por minúsculas.
• Cambiamos el nombre de la clase principal.
• Eliminamos el punto y coma.
1212
Como Imprimir en Pantalla
System.out.print(“...”); Imprime lo que está contenido entre “”.
System.out.print("Rojo");
System.out.print("Amarillo");
System.out.println(“...”); Imprime lo que está contenido entre “” y luego se posiciona en la siguiente línea.
System.out.println("Rojo");
System.out.println("Amarillo");
Qué imprime?
Qué imprime?
1313
Como Imprimir en Pantalla
Concatenar + Para escribir una oración que ocupa más de una línea podemos concatenar.
System.out.println( "Para imprimir una oración" +
" que ocupa más de una línea podemos concatenar");
1414
Como Imprimir en Pantalla
\n Para posicionarse en la siguiente línea de la pantalla
System.out.println("Hola,\nEnvíame la tarea.\n\n" + "Atte,\nVanny Smith");
Hola,Envíame la tarea.
Atte,Vanny Smith
1515
Como Imprimir en Pantalla
Escriban un programa que imprima en pantalla:
Hola a todos, Hoy no habrá clases.
Atte. Jorge Salas.
1616
Identificadores
Nombres que identifican a los elementos del programa:• Métodos
• Clases
• Variables
Los identificadores se construyen con:
• Letras (mayúsculas y minúsculas).
• Dígitos (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
• Símbolos de subrayado ( _ ) o peso ($)
• Sin embargo, el primer caracter no puede ser un dígito.
1717
Buenos identificadores
Auto explicativos. Ni muy cortos, ni muy largos. No pueden ser palabras reservadas del lenguaje:
abstract continue for new switch
boolean default goto null synchronized
break do if package this
byte double implements private threadsafe
byvalue else import protected throw
case extends instanceof public transient
catch false int return true
char final interface short try
class finally long static void
const float native super while
1818
Buenos identificadores
El lenguaje Java es case-sensitive.• Maximo y maximo son dos identificadores distintos.
El símbolo de subrayado (_) se emplea para dar mayor legibilidad a nombres compuestos por varias palabras.
Se acostumbra emplear letras minúsculas para nombrar a las variables.
1919
Identificadores: Ejemplos
Los siguientes son identificadores válidos en Java:
puntero EdadEmpleado
nombre_empleado i
TAMANO_STRING While
potencia10 Nombre
For nombre
iF Telefono
area Telefono_100
2020
Identificadores: Ejemplos
Los siguientes son identificadores inválidos:
1texto
nombre-empleado
while
2121
Tipos de datos en Java
Tipo Rango aprox.
int 2.000.000.000
short 30.000
long 9x1018
Tipo Rango Aprox.
float 3.4 x 1038
double 1.8 x 10308
Ocuparemos estos
•Enteros:
•Reales:
2222
Tipos de datos en Java
Caracteres:
char: ‘a’,‘z’,‘?’,‘$’,‘@’,‘G’,´7’, …; Los caracteres del código Unicode.
Booleano: boolean: true o false
2323
Variables
Los programas que hemos hecho hasta ahora sólo imprimen mensajes en pantalla. Pero
cuando programamos queremos ser capaces de almacenar datos, manipular datos, etc. Por
este motivo necesitamos variables.
2424
Variables
Propósito: poder almacenar datos.
Tienen un identificador asociado.
Debe tener un tipo de dato asociado.• Clase de dato que se almacenará en ella. Por
ejemplo, el dato puede ser de tipo int, double, char, etc.
Debe ser declarada previamente a su uso.
En resumen: Una variable es un objeto que almacena un dato, y tiene asociados un identificador y un tipo.
2525
Variables
¡Usa variables! Hace cálculos
intermedios.
class Doble{ public static void main(String[] args) { int numero; int doble;
numero = 4; doble = 2*numero;
System.out.println("El doble del número " + numero + " es: " + doble ); }}
2626
Variables
En el programa anterior introducimos tres conceptos nuevos:
1. Variables.2. Imprimir el valor de variables en
pantalla.3. Cálculos.
El doble del número 4 es: 8
2727
Variables
Forma genérica para declarar una variable:
<tipo> <identificador> [= <valorInicial>];
<tipo>: Tipo estándar (int, float, char, boolean, etc.).
<valor_inicial>: Puede corresponder a una constante del tipo entero, real, caracter, etc.
[]: significa opcional.
2828
Variables
Ejemplos de declaraciones de variables:
• int numero;
• char inicial;
Ejemplos de declaraciones de variables asociadas a un dato:
• int numero = 10;
• char inicial = ‘G';
2929
Variables
int num_alumnos;
Crea la variable num_alumos.
int num_alumnos = 55;
Crea la variable num_alumos y le asigna un valor. Se dice que estamos inicializando esta variable pues es la primera vez que le asignamos un valor.
El símbolo ‘=’ es el operador de asignación; no es una ecuación algebraica.
3030
Variables
int num_alumnos, num_salas;
Crea las variables num_alumnos y num_salas.
int num_alumnos = 55, num_salas = 20;
Crea las variables num_alumnos y num_salas y les asigna un valor.
3131
Variables
class Doble{
public static void main(String[] args) {
int numero; int doble;
numero = 4; doble = 2*numero;
System.out.println("El doble del número " + numero + " es: " + doble ); }}
Creamos variables
Les asignamos un valor
3232
Variables
Podemos cambiar el tipo de dato que almacena una variable siempre y cuando este cambio sea consistente.
Sin embargo si tenemos: double a = 2.5 ; int b = a;
Esto es ilegal en Java y produciría un error. El problema es cómo interpretar un número que tiene decimales como un entero.
3333
Variables
Pero si tenemos: int a = 2; double b = a;
Es válido, pues cualquier número que es int (número entero) puede ser interpretado también como double (número real). En este caso b= 2.0 .
3434
Variables
En Java las siguientes conversiones son válidas:
De a
short int, long, float, double
int long, float, double
long float, double
float double
3535
Variables
Si queremos hacer una conversión no válida en Java debemos anteponer paréntesis al valor o variable que vamos a convertir.
Ejemplo: int a = (int) 12.8 ; En este caso la variable a almacenará el valor
12. Ejemplo: double a = 2.4; int b = (int) a;
En este caso la variable b almacenará el valor 2, pero la variable a sigue teniendo el mismo valor 2.4.
3636
Variables
class Doble{
public static void main(String[] args) {
int numero; int doble;
numero = 4; doble = 2*numero;
System.out.println("El doble del número " + numero + " es: " + doble ); }}
1. Variables.2. Imprimir el valor de variables en pantalla.3. Cálculos.
3737
Variables: Imprimir
Para imprimir variables usamos los mismos métodos que usábamos para imprimir una oración:
System.out.print()
System.out.println()
3838
Variables: Imprimir
class Imprimir{ public static void main(String[] args) { int numero; System.out.println(numero); }}
Ejemplo: Imprimir una variable en pantalla
¿Cúal es el error aquí?
3939
Variables: Imprimir
class Imprimir{ public static void main(String[] args) { int peso = 50; double estatura= 1.70; System.out.println(“El paciente pesa ” + peso + “ kilos y mide ” + estatura + “ m.”); }}
Ejemplo: Imprimir una combinación de variables y oraciones.
4040
Variables: Imprimir
Hagan un programa que imprima en pantalla su edad.
Yo tengo 20 años
4141
Variables
class Doble{
public static void main(String[] args) {
int numero; int doble;
numero = 4; doble = 2*numero;
System.out.println(“El doble del número ” + numero + “ es: ” + doble ); }}
1. Variables.2. Imprimir el valor de variables en pantalla.3. Cálculos.
4242
Expresiones Aritméticas
Operadores binarios+ Suma- Resta* Multiplicación/ División
Operadores unitarios- Signo negativo+ Signo positivo
4343
Expresiones Aritméticas
Precedencia igual a la que conocemos:
•*, / antes que +,-
•De izquierda a derecha
•Para cambiar la precedencia usamos paréntesis.
•Los operadores unitarios +,- antes que todas las operaciones aritméticas
4444
Expresiones Aritméticas
Si tenemos +5*8 - (4 - 3). El orden sería:5*8 – (4 - 3)5*8 – 140 – 139
Recomendación: Siempre usen paréntesis.
Por ejemplo: ¿Cómo se interpreta 3/4*2?
4545
Expresiones Aritméticas
2 + 3 * 2 15 * 6
(2 + 3) * 2 -4
-2 / 3 3 * 4 * 5
3 / 4 – 7 3 * (4 - 5 )
5-7 1 + 15 - 6
2 - 1 + 3 1 + (2 - 7)
4646
Expresiones Aritméticas
Cuando tengo una expresión aritmética si no uso puntuación Java asume (y lo almacena) que el dato es de tipo int, de lo contrario asume que es de tipo double.
Ejemplo: 7 + 3.0
Asume y lo almacena como int
Asume y lo almacena como double
4747
Expresiones Aritméticas
Si hacemos operaciones con datos del mismo tipo el resultado va a ser del tipo de estos datos. Por ejemplo, si divido dos datos de tipo int el resultado va a ser de tipo int.Ejemplo: 7/3 = 2
Si combino enteros (por lo tanto int) con reales (por lo tanto double) el resultado será de tipo double.Ejemplo: 7.0/3 = 2.3333
4848
Expresiones Aritméticas
Ejemplos:7/4 = ?7/4 = ?
7/2.0 = ?7/2.0 = ?
-7 + 4 = ? -7 + 4 = ?
3.0 + 4 = ?3.0 + 4 = ?
(-3)/(-4) = ?(-3)/(-4) = ?
6/18 = ?6/18 = ?
4949
Expresiones Aritméticas
¿Qué pasa si tenemos una expresión más larga?Por ejemplo: 3/2 + 4.0*(5 - 4.3)
Java hace las conversiones paso a paso según corresponda.
5050
Expresiones Aritméticas
En el ejemplo: 3/2 + 4.0*(5 - 4.3)
3/2 + 4.0*0.7
1 + 4.0*0.7
1 + 2.8
3.8
5151
Expresiones Aritméticas
4 + 5/2.0 = ?
4.0 + 5/2 = ?
8 + 7/2*5.0 = ?
5/6-6*2/15 = ?
5252
Expresiones Aritméticas
También podemos usar un cast, el cual tiene mayor precedencia que *, / .
Se le aplica al valor que está a la derecha. Si queremos que el cast se aplique a más de
un valor podemos usar paréntesis.
Ejemplos:(int)4.5 + 3 = ?(double)(1/2) = ?(double)(3/2 + 1) + 1 = ?
5353
Expresiones Aritméticas
Módulo m%n• Es el resto de la división de m divido por n.
• Útil para cuando queremos saber si un número es divisible por otro, pues el resto es cero.
• Tiene la misma precedencia que *, /
• Si m o n son negativos entonces se calcula l m l % l n l y se conserva el signo de m.
Ejemplos7%3 = 1
4%2 = 0 -13%7 = -6
13%-7 = 6
5454
Expresiones Aritméticas
Precedencia hasta ahora( ) cast * / % + -
Le podemos asignar el valor de una expresión aritmética a una variable.
¿Qué pasa si declaramos a la variable a como un int?
class Ejemplo{ public static void main(String[] args) { double a; a = 6 + 4.0*3; System.out.println(a); }}
5555
Expresiones Aritméticas
En una expresión aritmética también podemos usar otras variables.
El valor de las variables que están en el lado derecho del signo = no cambiarán su valor.
Ejemplos:• a = b*3;
• a = b;
• a = (int)*12.2 – c*b;
• b = a*5-4;
5656
Expresiones Aritméticas
1. Variables 2. Imprimir el valor de variables en pantalla.3. Cálculos.
class Doble{
public static void main(String[] args) {
int numero; int doble;
numero = 4; doble = 2*numero;
System.out.println(“El doble del número ” + numero + “ es: ” + doble ); }}
5757
Expresiones Aritméticas
Finalmente, tomemos el ejemplo y veamos que pasa con las variables y las expresiones aritméticas.
int numero; ?
int doble; ?
numero = 4; ?
doble = 2*numero; ?
5858
Expresiones Aritméticas: char
Los char son tipos de datos que nos permiten representar los caracteres que conocemos: las letras (mayúsculas y minúsculas), los dígitos, los símbolos etc.
Estos se representan con bits. Usamos 16 bits para representar cada carácter (216= 65536).
Por ejemplo ‘B’ se representa como:0000 0000 0100 0010 = ?
5959
Expresiones Aritméticas: char
Si tenemos int a= ‘B’ ;Java guardará el valor numérico correspondiente a ‘B’ en la variable a.
Lo contrario también es posible. Pero, ¿Qué creen que pasará si: char c = 70; ? char c = ‘7’; ?
Podemos ir de char a int, long , float y double, pero no podemos tratar de asignarle un valor numérico a una variable de tipo char.
char c = ‘B’; c = c+1;
a ?
Esto produce un error
6060
Expresiones Aritméticas: char
En Unicode, los códigos de las letras del alfabeto son sequenciales tanto para mayúsculas como para minúsculas.
También son sequenciales los códigos de los dígitos.
Por ejemplo:• El valor numérico de ‘A’ es 65, de ‘B’ es 66, de ‘C’ es
67 etc.
• El valor numérico de ‘a’ es 97, de ‘b’ es 98, de ‘c’ es 99 etc.
6161
Expresiones Aritméticas: char
char c = ‘a’ + 1; ?
char c = (char)(‘a’ + 1); ?
int a;char c;c= ‘9’;a = c – ‘1’; a = c – 1 ;
a = ‘A’ – ‘B’;
?
?
?
6262
Expresiones Aritméticas: char
Char
Dec
blank
32
! 33
” 34
# 35
$ 36
% 37
& 38
’ 39
( 40
) 41
* 42
Char
Dec
0 48
1 49
2 50
3 51
4 52
5 53
6 54
7 55
8 56
9 57
: 58
Char
Dec
@ 64
A 65
B 66
C 67
D 68
E 69
F 70
G 71
H 72
I 73
Z 90
Char
Dec
a 97
b 98
c 99
d 100
e 101
f 102
g 103
h 104
i 105
z 122
{ 123
6363
Ejemplo: De millas a kilómetros
Hagan un programa que:1. Cree dos variables, una llamada millas y otra
llamada kilómetros.2. Asignenle el valor 2 a la variable millas.3. kms = millas * 1.609.4. Finalmente impriman en pantalla el equivalente a
kilómetros usando las variables como argumentos de System.out.println()
6464
Ejemplo: De millas a kilómetros
class OperacionesBasicas0{
public static void main(String[] args) {
double millas, kms;millas = 2;
kms = millas * 1.609;System.out.println( millas + “ millas equivalen a ”
+ kms + “ kilómetros.”); }}
6565
Ejemplo: Area de un círculo
class Ejemplo {
public static void main(String[] args) {
double pi = 3.1415;double radio, area;
radio = 2;
area = pi * radio * radio; System.out.println("El area de un circulo de radio " +radio+ ": es " + area); }}
6666
Métodos Math
En Java existe una clase llamada Math que tiene una serie de métodos que nos sirven para calcular la raíz cuadrada, el valor absoluto etc.
Estos métodos reciben un argumento y devuelven un valor.
Por ejemplo: a = Math.abs(-3);• El argumento es -3.
• Retorna 3, este valor es almacenado en la variable a.
6767
Métodos Math
Math.abs• Retorna el valor absoluto de una expresión.
• El tipo de valor que retorna es el mismo tipo que el del argumento, el cual puede ser de cualquier tipo.
• Por ejemplo, si el argumento es de tipo double el valor que retorna también es de tipo double.
• Si el argumento es de un rango menor que int (por ejemplo short), retornará un valor de tipo int.
class Ejemplo { public static void main(String[] args) { double b =-3; int a = Math.abs(b); System.out.println(a); }}
¿Qué pasara?
6868
Métodos Math
Math.sqrt• Retorna la raíz cuadrada positiva del argumento, el
cual puede ser de cualquier tipo.
• Siempre retorna un valor de tipo double.
• Si el argumento es negativo retornará NaN (not a number)
• Ejemplo : Math.sqrt(4) 2.0
6969
Métodos Math
Math.pow• Calcula ab, donde a y b son los argumentos.
• Ejemplo: Math.pow(4,10).
• Siempre retorna un valor de tipo double.
int a = Math.pow(2,4); ¿Problema? double b = Math.pow(-5, 0.5);¿Problema?
7070
Métodos Math
class Ejemplo
{
public static void main(String[] args)
{
double a = 3, b = -0.5;
double c = Math.abs(b);
System.out.println(“ El valor absoluto de ”+b+ “es ”+c);
double d = Math.sqrt(a);
System.out.println(“La raiz cuadrada de ”+a+ “es ”+d);
double e = Math.pow(a,b);
System.out.println(a + “elevado a ”+b+ “es igual a ”+e);
}
}
7171
Expresiones lógicas (booleanas)
Se emplea para dirigir al programa por un determinado flujo de ejecución, dependiendo de si la evaluación de una expresión lógica da verdadero o falso.
Una expresión lógica puede ser verdadera o falsa. Tenemos tipos de datos llamados boolean que pueden ser true o false.
Operadores relacionales o de comparación:
== Igual ( No es lo mismo que =)!= Distinto< Menor<= Menor o igual> Mayor>= Mayor o igual
7272
Expresiones lógicas (booleanas)
5 > 6 ?
7 == 8 ?
15 <= 6 ?
Pero recuerden que podemos crear variables de tipo boolean y por lo tanto podemos asignarle el valor de una expresión lógica a una variable de tipo boolean.
7373
Expresiones lógicas (booleanas)
class Ejemplo {
public static void main(String[] args) {
boolean a = 3 > 5;System.out.println(a);
}}
7474
Expresiones lógicas (booleanas)
Conectivos lógicos binarios:&& Conjunción (y)|| Disyunción (o)
Conectivos lógico unario:! Negación (no)
Precedencia: ! && ||
¿Cúando a && b es verdadero?¿Cúando a || b es verdadero?
7575
Expresiones lógicas (booleanas)
class Ejemplo {
public static void main(String[] args) {
boolean a = 3 > 5;boolean b = 4 < 7;boolean c = a && b;boolean d = a || b;
System.out.println("c: " +c + "\nd: " + d);
}}
7676
Expresiones lógicas (booleanas)
Precedencia:< <= >= >== !=
!&&||
Asociatividad: De izquierda a derecha.
7777
Ejemplos: Expresiones booleanas
x (numero > 5) && !y
true (numero == 1)
!x 5 == 6
true || x 4 >= 2
false (4 % 2 == 0) && false
false && x && 3>4 !(1< 2)
7878
Expresiones lógicas (booleanas)
Si tenemos una mezcla de expresiones lógicas y aritméticas en una expresión, los operadores aritméticos siempre tienen precedencia.
Por ejemplo: 2.0 + 3 > 4.5*1 2.0 +3 > 4.5 5.0 > 4.5
true
7979
Expresiones lógicas (booleanas)
La precedencia de todos los operadores
( )
! -
* / %
+ -
< <= >= >
== !=
&&
||
=
Lo mejor es SIEMPRE usar paréntesis
8080
Expresiones lógicas (booleanas)
class Ejemplo
{
public static void main(String[] args)
{
boolean a =((3+7) >= (1/2 + 2*20/4)) && (true || !((3<5)==(4!=3)));
System.out.println(a);
}
}
¿Qué imprime?
8181
Expresiones lógicas (booleanas)
Del ejemplo anterior podemos ver que:• Valores de cualquier tipo pueden ser comparados,
excepto por los de tipo boolean. Booleans sólo se pueden comparar con booleans.
En el ejemplo teníamos: (3<5)==(4!=3)También podríamos tener: 1/2== 3/4Pero no podemos tener: 1/2== 4!=3
8282
Expresiones lógicas (booleanas)
También podemos incluir datos de tipo char en expresiones lógicas.
Cuando comparamos dos char, lo que vamos a comparar es si un char precede a otro según el código que tenga en Unicode.
Por lo tanto, según lo que ya hemos visto:‘A’ < ‘B’ < ‘C’ < ‘D’....‘a’ < ‘b’ < ‘c’ < ‘d’ ...‘0’ < ‘1’ < ‘2’ < ‘3’ ....
8383
Expresiones lógicas (booleanas)
También podemos mezclar datos de tipo char con tipos de datos numéricos (por ejemplo int o double).
Por ejemplo, podemos decirboolean a = 3 < ‘b’;
8484
Leer desde la pantalla
Hasta ahora los programas que hacíamos no interactuaban con un posible usuario del programa.
Por ejemplo en el programa:class OperacionesBasicas0{ public static void main(String[] args) { double millas, kms; millas = 2; kms = millas * 1.609; System.out.println( millas + “ millas equivalen a ”
+ kms + “ kilómetros.”); }}
8585
Leer
Si queremos saber a cuantos kilómetros equivalen 5 millas tendríamos que cambiar directamente el programa y decir millas = 5;
Sin embargo el usuario del programa no debería tener que él/ella cambiar el código, sino que deberíamos ser capaces de preguntarle a él/ella que es lo que quiere saber. En este caso, a cuantos kilómetros equivalen x millas, donde x va a ser proporcionado por el usuario.
8686
Leer
Leer valores directamente con las herramientas que ofrece Java es muy complicado, por lo que vamos a crear una clase llamada In (está basada en la del profesor John Carter) y la vamos a usar para leer los datos que entregue el usuario.
Esta clase tiene los siguientes métodos:readInt In.readIntreadDouble In.readDoublereadChar In.readCharreadLine In.readLinereadFloat In.readFloat
In.readInt
Indica la clase
Indica el métodode la clase
8787
Leer
class Ejemplo{ public static void main(String[] args) { double millas, kms;
System.out.println("Ingrese el número de millas");
millas = In.readDouble(); kms = millas * 1.609;
System.out.println( millas + " millas equivalen a " + kms + " kilómetros."); }}
8888
Comando if
if ( expresión-booleana ) { Bloque de instrucciones}
Si la expresión es verdadera, se lleva a cabo el bloque de instrucciones.
Si el bloque de instrucciones es sólo una línea podemos omitir {}.
if ( expresión-booleana ) Instrucción
8989
Comando if
class Ejemplo {
public static void main(String[] args) {
int numero; System.out.println("Dime un número: "); numero = In.readInt();
if (numero < 0){
numero = -numero;} System.out.println("Valor absoluto: " +
numero); } }
9090
Comando if
if ( expresión-booleana ) {
Primer bloque de instrucciones} else { Segundo bloque de instrucciones}
Si la expresión es verdadera, se lleva a cabo el primer bloque de instrucciones, y si no es verdadera entonces se lleva a cabo el segundo.
9191
Ejemplo: Par o impar
class Ejemplo {
public static void main(String[] args) {
int numero;
System.out.println("Dime un número: "); numero = In.readInt();
if (numero%2 == 0)System.out.println(“Es par");
else System.out.println ("Es impar");
} }
9292
Comando if
Hagan un programa que diga si un alumno aprobó un curso basado en las siguientes reglas:• Debe tener nota mayor o igual que 3.0 en el examen.
• El promedio entre el promedio de pruebas y el examen debe ser mayor que 4.0.
• Debe tener nota sobre 4.0 en (por separado):
- - promedio de las tareaspromedio de las tareas
- - promedio de los laboratoriospromedio de los laboratorios
- - promedio de las pruebaspromedio de las pruebas.. El programa debería pedirle al usuario que
ingrese lo que está en negrita.
9393
Comando if
class Ejemplo{ public static void main(String[] args) { double examen, prom_pruebas; double prom_tareas, prom_lab; System.out.println("Ingrese la nota del examen"); examen = In.readDouble(); System.out.println("Ingrese el promedio de las pruebas"); prom_pruebas = In.readDouble(); System.out.println("Ingrese el promedio de las tareas"); prom_tareas = In.readDouble(); System.out.println("Ingrese el promedio de los laboratorios"); prom_lab = In.readDouble();
9494
Comando if
double prueb_examen = (prom_pruebas + examen)/2; if (( examen >= 3.0) && (prom_pruebas > 4.0)&& (prom_tareas > 4.0) && (prom_lab > 4.0) && (prueb_examen > 4.0)) { System.out.println ("El alumno aprobó el curso"); }
else { System.out.println ("El alumno no aprobó el curso"); } }}
9595
Variación: if/else if/else
A veces tenemos más de dos opciones:
if ( expresión-booleana ) { Bloque de instrucciones} else if ( expresión-booleana ) { Bloque de instrucciones} else { Bloque de instrucciones}
Permite escoger entre varias ramas. Esta opción nos permite ser más eficientes y hacer menos
comparaciones (cada if representa una comparación).
9696
Variación: if/else if/else
class Ejemplo { public static void main(String[] args) {
//El siguiente programa pide la nota de un
//alumno y le dice si aprobó(>=4.0), aprobó destacado(>=5.5),
//reprobó(<4.0) o reprobó con derecho a examen recuperativo (>=3.8) double nota; System.out.println("Ingrese la nota");
nota= In.readDouble();
if (nota >= 5.5) System.out.println("El alumno aprobo en forma destacada");
else if (nota >= 4.0) System.out.println("El alumno aprobo"); else if (nota >= 3.8) System.out.println("El alumno reprobo con derecho al recuperativo");
else System.out.println("El alumno reprobo");
} }
9797
Variación: if/else if/else
class Ejemplo {
public static void main(String[] args) {
//El siguiente programa le pregunta a un//usuario cual es el numero de la rifa que compro//y le dice si se gano alguno de los tres premios//donde el premio mayor se lo lleva el que compro//el numero 123, el segundo el que compro el 326 // y el tercero el que compro el 784
int num_rifa;int premio_mayor = 123;
int segundo_premio = 326; int tercer_premio = 784;
9898
Variación: if/else if/else
System.out.println("Ingrese su numero de la rifa");num_rifa= In.readInt();
if (num_rifa == premio_mayor) System.out.println("Usted gano el premio mayor: un mercedes");
if (num_rifa == segundo_premio) System.out.println("Usted gano el segundo premio: un viaje a Europa");
if (num_rifa == tercer_premio) System.out.println("Usted gano el tercer premio: 100.000 pesos");
if (num_rifa != 123 && num_rifa != 326 && num_rifa != 784) System.out.println("Lo siento, no gano esta vez");
} }
9999
Variación: if/else if/else
Escriban nuevamente este programa de una forma más eficiente
class Ejemplo { public static void main(String[] args) { //El siguiente programa le pregunta a un //usuario cual es el numero de la rifa que compro //y le dice si se gano alguno de los tres premios //donde el premio mayor se lo lleva el que compro //el numero 123, el segundo el que compro el 326 // y el tercero el que compro el 784
int num_rifa; int premio_mayor = 123; int segundo_premio = 326; int tercer_premio = 784;
100100
Variación: if/else if/else
System.out.println("Ingrese su numero de la rifa"); num_rifa= In.readInt();
if (num_rifa == premio_mayor) System.out.println("Usted gano el premio mayor: un mercedes");
else if (num_rifa == segundo_premio) System.out.println("Usted gano el segundo premio: un viaje a Europa");
else if (num_rifa == tercer_premio) System.out.println("Usted gano el tercer premio: 100.000 pesos"); else System.out.println("Lo siento, no gano esta vez");
} }
101101
Variación: if/else if/else
IMPORTANTE: un else siempre se asocia con el último if, a menos que usemos llaves {}.
La indentación no cambia el hecho de que un else siempre se asocia al último if. En este ejemplo, la indentación que usamos hace parecer que el else se está asociando al primer if.
if ( a < 5) if (a < 3) System.out.println (“Si”);else System.out.println(“No”);
Si a = 6¿Qué imprime esteprograma?
102102
Variación: if/else if/else
if ( a < 5){ if (a < 3) System.out.println (“Si”);}else System.out.println(“No”);
Si a = 6¿Qué imprime esteprograma?
103103
Variación: if/else if/else
En el primer ejemplo, podríamos haber usado {} para quede más claro a que if el else está haciendo referencia:
if ( a < 5) if (a < 3) System.out.println (“Si”);else System.out.println(“No”);
es equivalente
a
if ( a < 5){ if (a < 3) System.out.println (“Si”); else System.out.println(“No”); }
Pero también podemos indentarpara que visualmente quede claroa que if hace referencia el else.
(Estos 3 ejemplos son equivalentes)
if ( a < 5) if (a < 3) System.out.println (“Si”); else System.out.println(“No”);
104104
Strings
Hasta ahora hemos usado los tipos primitivos de datos (int, short, long, double, char etc) que en total son 8. Sin embargo, existen también tipos de objetos.
Java nos permite crear objetos de tipo String.
Un objeto String representa una cadena alfanumérica.
¿Para qué sirve?• Para hacer programas que manipulen texto.
105105
Strings
Declaración de un string: String s;
Declaración e inicialización de un string: String s = "Este es el valor inicial";
Crear un string a partir de otros: String s1 = "Hola, "; String s2 = " ¿qué tal?"; String s3 = s1 + s2;
106106
Strings
Cuando creamos una variable de tipo String lo que estamos creando es una referencia.
String s;
Cuando le asignamos un valor a una variable String estamos creando (recién) un objeto de tipo String, la variable s es una referencia al objeto que creamos.
s = “Hola”;
s
s“Hola”
107107
String
Con referencia queremos decir que s está apuntando a la ubicación en la memoria en la que se encuentra el objeto “Hola”.
En cambio cuando una variable es de uno de los tipos primitivos en la variable guardamos el valor que le asignamos.
int a = 3;
String s = “Hola”;
a3
s“Hola”
108108
Strings
Si tenemos:String s1 = “Hola”;
String s2 = s1;
Lo que estamos diciendo con = es que los dos hacen referencia al mismo objeto, es decir, ambos apuntan al mismo objeto.
s1“Hola”
s2
109109
Strings
¿Qué imprime esto?
String s1 = "Blanco";String s2 = "Azul";s1 = s2;s2 = "Rojo";System.out.println(s1 + " " + s2);
¿Qué imprime esto?
int a = 1;int b = 2;a = b;b = 4;System.out.println(a + " " + b);
110110
Strings
Tomando en cuenta que las variables de tipo String son referencias, debemos entender a que nos referimos si preguntamos si:
s1 == s2
En este caso el valor de la expresión va a ser true si ambas apuntan (o hacen referencia) al mismo objeto, y false en caso contrario.
s1“Hola”
s2
111111
Strings
¿Cúal es el valor de a?String s1 = “Rojo”;
String s2 = “Rojo”;String s2 = “Rojo”;
boolean a = (s1==s2boolean a = (s1==s2););
Ambas variables s1 y s2 apuntan a objetos que son idénticos en su contenido pero eso no quiere decir que apunten al mismo objeto. En este caso:s s
“Rojo” “Rojo”Por lo tantoa es false
112112
Strings
Para comparar si dos objetos de tipo String son iguales en contenido Java provee el método equals.
Este método compara si dos Strings son iguales y retorna true si lo son y false si son diferentes.
La forma de llamar al método es la siguiente:s1.equals(s2)
Donde s1 y s2 son Strings.
113113
Strings
class EjemploString{ public static void main(String[] args) { String s1 = "Sol", s2 = "Luna";
boolean a;
a = s1.equals(s2); System.out.println(a); a = s2.equals("luna"); System.out.println(a);
a = s2.equals("Luna"); System.out.println(a);
a = s2.equals(" Luna"); System.out.println(a);
}}
falsefalsetruefalse
114114
Strings
Para comparar el orden lexicográfico (orden en el diccionario) de dos objetos de tipo String Java provee el método compareTo.
La forma de llamar al método es la siguiente:s1.compareTo(s2)
Donde s1 y s2 son Strings.
Este método compara cada carácter de ambos Strings, de izquierda a derecha. Se detiene cuando alguno de los dos Strings tiene un carácter diferente al otro o uno (o ambos) de ellos se termina.
115115
Strings
Para determinar el orden lexicográfico, las reglas son:• Mayúsculas antes que minúsculas (por ejemplo, ‘A’
antes que ‘a’)
• Espacio antes que las letras (por ejemplo tala antes que talar)
• ‘A’ antes que ‘B’ antes que ‘C’ antes que ‘D’ ….
s1.compareTo(s2)• Retorna 0 si ambos Strings son idénticos.
• Un número negativo si s1 está antes de s2.
• Un número positivo si s1 está después de s2
116116
Stringsclass Ejemplo{ public static void main(String[] args) { String s1 = "Luna", s2 = "Lunas";
int a; a = s1.compareTo(s2); System.out.println(a);
a = s1.compareTo("luna"); System.out.println(a); a = s1.compareTo(" Luna"); System.out.println(a); a = s1.compareTo("Lun"); System.out.println(a); a = s1.compareTo("Luce"); System.out.println(a);
}}
-1-3244111
Imprime
117117
Instrucción while
while ( expresión-booleana ) { ... Bloque de instrucciones ...}
Realiza una tarea mientras ocurre una cierta condición.
Podemos hacer un programa que itere.
118118
Instrucción while
class Contar{
public static void main(String[] args) {
//Este programa cuenta de 1 a n//donde n es dado por el usuarioint n, max;
System.out.println("Hasta que numero quiere contar? ");max = In.readInt();n=1;while ( n <= max ) {
System.out.println(n);n=n+1;
}}
}
119119
Instrucción while
Al ejecutarse la instrucción while, se evalua la expresión booleana en paréntesis, y si su valor es true, se ejecuta la o las sentencias subordinadas.
Una vez hecho esto, la condición es reevaluada y se procede de la misma manera.
Cuando la condición se vuelve false, en la siguiente evaluación se dará la instrucción while por terminada.
Las instrucciones subordinadas al while pueden ser compuestas, es decir, otras instrucciones while, if, etc.
120120
Instrucción while
Cuando usamos esta instrucción es útil saber que:n=n+1 es equivalente a n++n=n-1 es equivalente a n--
En el ejemplo anterior, podríamos haber escrito el while de la siguiente forma
while ( n <= max ) {
System.out.println(n);n++;
}
121121
Instrucción while
class Ejemplo {
public static void main(String[] args) {
int numero; System.out.println("Dime un número: "); numero = In.readInt();
if (numero < 0){
numero = -numero;} System.out.println("Valor absoluto: " + numero);
} }
¿Cómo lo podemos mejorar para que el usuariopregunte cuantas veces quiera?
122122
Instrucción while
class Ejemplo { public static void main(String[] args) { int numero = 1;
while (numero != 0) { System.out.println("Dime un número, para terminar ingrese 0 "); numero = In.readInt(); if (numero!=0) { if (numero < 0) { numero = -numero; } System.out.println("Valor absoluto: " + numero); } } System.out.println("Adios"); } }
123123
Instrucción while
¿Por qué debemos inicializar numero? Cuidado con los ciclos infinitos. Ver ventajas de usar indentación.
class Ejemplo {public static void main(String[] args) {int numero = 1;while (numero != 0){System.out.println("Dime un número, para terminar ingrese 0 ");numero = In.readInt();if (numero!=0){if (numero < 0){numero = -numero;}System.out.println("Valor absoluto: " + numero);} System.out.println("Adios");} }
•¿Cúal llave falta?•¿Qué instrucciones están dentro del while?
124124
Instrucción while
Calculadora de promedios(Guía): recibe una lista de notas (para terminar escribir “-1”) e imprime su promedio.
A veces usamos ciclos anidados. Por ejemplo un while dentro de un while.• Números Pitagóricos: Escribir un programa que
determine si para un número cualquiera (a) existen otros dos números (b y c) tales que: a2 = b2 + c2
125125
Ejemplo: Números Pitagóricos
class Pitagoricos
{
public static void main(String[] args)
{
int a, b, c;
boolean solucion = false;
System.out.println("Ingrese a");
a=In.readInt();
b=1;
c=1;
126126
Ejemplo: Números Pitagóricos
while (b < a && solucion == false){
c=1;while(c<a && solucion == false){
if(a*a == b*b + c*c ){
System.out.println("b = "+b+" y c = "+c);
solucion = true;}c=c+1;
}b=b+1;
}
if (solucion==false)System.out.println("No existe descomposicion");
}
}
127127
Instrucción for
Ocurre algo al inicio (inicialización). Mientras ocurre algo (expresión-booleana)
ejecuta el bloque de instrucciones. Al final de cada ciclo realiza una acción
(actualización).
for ( inicialización ; expresión-booleana ; actualización )
{ ... Bloque de instrucciones ...}
128128
Instrucción for
int i=0;
while (i<10)
{
System.out.println(i);
i++;
}
for(int i=0; i<10; i++)System.out.println(i);
int i;for(i=0; i<10; i++)
System.out.println(i);
129129
Instrucción for
Útil en ciclos en que se conoce de antemano el número de iteraciones a realizar.
Contar de 0 a 99:
¿Contar de 100 a 1?
for (int i = 0 ; i < 100 ; i++) System.out.println("i = " + i);
130130
Instrucción for: Ejemplo1
class Ejemplo{
public static void main(String[] args) {
int i;//Cuenta hasta 10for (i = 0 ; i < 10 ; i++)
System.out.println("i = " + i);
int rep;//multiplos de 5 en forma ascendente//hasta 100System.out.println("Estos son los multiplos de 5 hasta 100 ");for (rep=0 ; rep<=100 ; rep=rep+5)
System.out.println(rep);
//Multiplos de 5 en forma descendente//desde 100System.out.println("Estos son los multiplos de 5 desde 100 ");for (rep=100 ; rep>=0 ; rep=rep-5)
System.out.println(rep); }}
131131
Instrucción for: Ejemplo2
class Ejemplo{
public static void main(String[] args) {
double base, resultado;int i,exponente;
System.out.println("Ingrese el valor de x: ");base = In.readDouble();System.out.println("Ingrese el valor de n: ");exponente = In.readInt();
resultado = 1;for(i = 1; i <= exponente ; i++)
resultado = resultado*base;
System.out.println("Resultado de " + base + "^" + exponente + " : " + resultado);
}}
132132
Instrucción for
Puedo crear expresiones más complejas.Por ejemplo:
for(i=2, j=3; i<=20 && j <=30; i=i+2, j=j+3)System.out.println(i + “ ” + j);
Esto imprime:2 3
4 6
6 9
8 12
10 15
12 18
14 21
16 24
18 27
20 30
133133
Instrucción for
for ( inicialización ; expresión-booleana ; actualización )
Por ejemplo:for(i=1, j=0, k=3; i<=2 && j<=5 && k<10; i++, j++, k++)
System.out.println(i+ “ ”+ j + “ ” + k);
Imprime1 0 32 1 4
Aquí puedo agregar las expresiones que quiera pero debo separar con comas.
134134
Arreglos
Los arreglos son estructuras de datos complejas (en el sentido de que no son atómicas)
Agrupan datos de un mismo tipo en particular, llamado el tipo base del arreglo.• El tipo base de un arreglo puede ser cualquiera de
los tipos primitivos de Java (int, double, float etc), incluso algunos tipos complejos (clases) como los String u otros arreglos.
135135
Arreglos: Declaración y Construcción
Declaración<tipo>[] <identificador>;
int[] a;
Construcción<identificador> = new <tipo>[<número-elementos>];
a = new int[20];
nombre
Arreglo
136136
Arreglos
La cantidad de elementos del tipo base que contiene el arreglo es fija: Debe especificarse al construirlo.
La sintaxis del lenguaje permite referirse a cada uno de los elementos que constituyen el arreglo empleando índices.
Los elementos del arreglo están numerados en forma jerárquica y consecutiva, empezando en 0.
10 21 32 83 23
0 1 2 3 n-1
Arreglo
valores
posición
137137
Arreglos: Declaración y Construcción
Declaración y Construcción<tipo>[] <identificador> = new <tipo>[<número-elementos>];
int[] a = new int[20];
Declaración y Construcción (con asignación)<tipo>[] <identificador> = {valor1, valor2, ...};
int[] edades = {17,19,21,20,18};
138138
Arreglos
La siguiente declaración:
String[] nombres = {"Juan","Pepe","Pedro","Maria"};
es equivalente a:
String[] nombres;
nombres = new String[4];
nombres[0] = "Juan";
nombres[1] = "Pepe";
nombres[2] = "Pedro";
nombres[3] = "Maria";
139139
Arreglos
Declaración de un arreglo de 100 caracteres:
char[] B = new char[100];
Declaración e inicialización de un arreglo de 10 enteros:int[] C = { 2, 5, 8, 100, 1, 2, 100, 5, 5, 5 };
• Declaración e inicialización de un arreglo de 10 caracteres:char[] D = {'a','z','E','e',65,‘7','@','U','*',‘u'};
Asignando un valor a la sexta posición de un arreglo de enteros:A[5] = 200;
140140
Arreglos
Como dijimos antes, una vez que creamos un arreglo su cantidad de elementos (o tamaño) es fijo.
Para obtener el tamaño de un arreglo escribimos:
<identificador>.length
Por ejemplo, si tenemos:double[] peso = new double[25];int a = peso.length;
En a guardamos el valor 25.
141141
Arreglos
Leyendo del usuario el contenido de un arreglo, mediante un ciclo for:
double[] A = new double[10]; int i;
for (i=0; i< A.length; i++) {
System.out.println("Dime un número?");A[i] = In.readDouble();
}
Noten que el contador i comienza en 0 y llega sólo hasta 9 (A.length – 1), dado que en los arreglos comezamos a contar desde 0. En este caso los 10 índices del arreglo van de 0 a 9.
142142
Arreglos
Mostrando un arreglo mediante un ciclo for:
for (i=0; i<A.length; i++)
System.out.println(A[i]);
Sumando dos elementos de un arreglodouble a = A[1] + A[3];
143143
Arreglos
Guía 3: Crear un arreglo con cinco elementos dados por el usuario. Luego intercambiar el primer elemento con el último. Finalmente, imprimir en pantalla los elementos del arreglo.
Escriba un programa que reciba las notas de un curso que tiene como máximo 40 alumnos. Una vez recibidas las notas debe dar la siguiente información:• La nota máxima
• El número de notas bajo 4
• El promedio
• La diferencia entre la nota máxima y la mínima
144144
Arreglos
La solución para el segundo ejercicio que se dará a continuación no es la mejor, pues todo lo que se pide hacer (promedio, notas bajo 4, etc) se podría hacer de una sola vez, cuando el usuario ingresa los datos.
145145
Arreglos
class Ejemplo
{
public static void main(String[]args)
{
double[] notas = new double[40];
double max=0, min=7.0, suma=0, prom, diferencia;
int i=0;
int bajo_4=0, num_notas=0;
boolean terminar = false;
146146
Arreglos
while(terminar == false){
if(i == 40) { System.out.println("Ya no puede ingresar mas notas"+
" el maximo es 40"); terminar = true; } else {
System.out.println("Ingrese nota, para terminar ingrese -1"); notas[i]= In.readDouble();
if (notas[i] == -1) terminar = true;
else i++;
} } num_notas=i;
147147
Arreglos
//Ahora buscamos la nota máxima y la mínima //Fíjense que nuevamente usamos el contador i //por lo que debemos nuevamente inicializarlo en 0 for(i=0; i< num_notas; i++) { if (notas[i] < min) min = notas[i]; //Acá no usamos else pues puede ser //que todas las notas sean iguales en //cuyo caso min=max if (notas [i] > max) max = notas[i]; }
diferencia = max-min;
148148
Arreglos
//Notas bajo 4.0for(i=0; i< num_notas; i++){ if (notas[i] < 4.0) bajo_4++;}
//Promediofor(i=0; i< num_notas; i++){
suma= suma+notas[i];} prom= suma/num_notas;
149149
Arreglos
//Finalmente imprimimos todo, siempre y cuando se haya ingresado//al menos una notaif(notas[0]!=-1){
System.out.println("La nota maxima fue un "+ max);System.out.println("El promedio fue: "+ prom);System.out.println(bajo_4 + " notas estuvieron bajo 4.0");System.out.println("La diferencia entre la nota "+ "maxima y la minima fue: "+ diferencia);
}
else System.out.println("Adios");
}}
150150
Arreglos: Importante
El lenguaje Java controla la validez de los índices que se emplean para referenciar un arreglo.• La siguiente porción de código compila sin problemas (es
decir, sin errores sintácticos), pero se producirá un error en tiempo de ejecución al referenciar posiciones inexistentes del arreglo.
// Ejemplo de error por acceso fuera de rango a un arreglo// Posiciones con índices del 20 al 29 son inválidas.
int[] arreglo = new int[20]; for (i=0; i<30; i++) arreglo[i] = 0;
Mensaje ArrayIndexOutOfBoundsException
También es común cometer estos errores olvidando que las posiciones de los arreglos están numeradas a partir del índice cero.• En un arreglo de tamaño N, las posiciones van de 0 a N-1.
151151
Arreglos: Importante
Las dos siguientes notaciones son válidas y equivalentes para declarar un arreglo:
• int[] arreglo;
• int arreglo[];
No obstante, privilegiaremos utilizar la primera.
152152
Arreglos
Al igual que los Strings, los arreglos son objetos, por lo tanto cuando declaramos un arreglo
int[] peso;int[] peso;
Estamos creando la variable peso la cual es una referencia (apunta) a un arreglo de enteros. Sin embargo, hasta este momento no hemos creado un arreglo de enteros. peso
153153
Arreglos
Para crear un arreglo de 10 enteros necesitamos escribir:
peso = new int[10];
A diferencia de las variables primitivas (int, double etc) los arreglos se inicializan automáticamente cuando los creamos. • Tipos númericos se inicializan con 0 (ó 0.0 en los double)
• char se inicializan con el carácter nulo
• boolean se inicializan con false
peso
0 0 0 0 00 0 0 00
154154
Arreglos
Por lo tanto, que pasa si tenemos:
double[] A = new double[10];double[] B;B=A;A[4]= 4.5;System.out.println(B[4]);double[] C = {1.0,2.0,3.0};B=C;int i;for(i=0; i < B.length; i++)
System.out.println(B[i]);
Veamos paso a paso lo que hace este programa
155155
Arreglos
double[] A = new double[10];
Creamos una variable A que es una referencia a un arreglo (que también creamos) de 10 elementos de tipo double, cada elemento Java lo inicializa en 0.0.
double[] B;
Creamos una variable B que es una referencia a un arreglo de elementos de tipo double pero aún no creamos ningún arreglo al que apunte B.
B
A
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0 1 2 3 4 5 6 7 8 9
156156
Arreglos
B=A;
A y B harán referencia al mismo arreglo
A[4]= 4.5;
Cambiamos de 0.0 a 4.5 el 5to elemento del arreglo A.
A
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0 1 2 3 4 5 6 7 8 9 B
A
0.0
0.0
0.0
0.0
4.5 0.0 0.0 0.0 0.0 0.0
0 1 2 3 4 5 6 7 8 9 B
157157
Arreglos
System.out.println(B[4]);
¿Qué se imprime en pantalla?
double[] C = {1.0,2.0,3.0};Creamos una variable C que apunta a un arreglo de 3 elementos de tipo double.
4.5
C
1.0
2.0
3.0
0 1 2
158158
Arreglos
B=C;
B deja de hacer referencia al mismo arreglo que hace referencia A y ahora hace referencia al mismo arreglo que hace referencia C. Por lo tanto ahora B hace referencia a un arreglo de 3 elementos. Antes habíamos dicho que un arreglo tiene tamaño fijo, es decir, una vez asignado el tamaño este no puede cambiar. Sin embargo, aquí estamos cambiando a B, que es una variable que apunta a un arreglo, no estamos cambiando un arreglo.
A0.00.00.00.00.04.50.
00.0
0.0
0.0
0 1 2 3 4 5 6 7 8 9
B
C3.02.01.0
0 1 2
159159
Arreglos
int i;
for(i=0; i < B.length; i++)
System.out.println(B[i]);
¿Qué imprime esto?
En resumen el programa completo imprime
1.02.03.0
4.51.02.03.0
160160
Arreglos
Si tenemos:double[] B;
int [] C = {1,2,3};
B=C;
¿Qué pasa en este caso?Produciría un error
pues B puede hacer referencia sólo a un arreglo
de doubles
161161
Arreglos bidimensionales
Algunos datos vienen en dos dimensiones.• Tableros, mapas, áreas, imágenes (dibujos),
matrices, planillas de cálculo, etc.
Arreglos bidimensionales.• Dos índices en lugar de uno.
• Dimensión: n x m
• Fila, Columna: [x][y]
Ejemplo: Notas de alumnos
162162
Ejemplo: Notas de alumnos
Diaz, Bruno
Doe, John
Perez, Juan
Quiroz, Ana
Rios, Luis
Salas, Marco
Tapia, Jorge
Yang, Li
I1 I2 I3 I4 PromedioAlumnos
0
1
2
3
4
5
6
0 1 2 3 4
0 3.5
4.3
5.3
5.8
4.72
1 4.3
5.2
5.1
4.3
4.72
2 5.2
4.5
3.4
6.2
4.82
3 6.2
4.1
3.4
5.6
4.82
4 5.4
3.2
6.5
4.8
4.97
5 5.8
4.9
6.2
5.8
5.67
6 5.3
4.4
6.4
3.2
4.82
[4][2] 6.5
163163
Arreglos bidimensionales
Declaración• String[][] tablero;
Construcción• tablero = new String[16][16];
Podemos declarar y construir al mismo tiempo• String[][] tablero = new String[20][30];
Inicialización 2 x 3 • int[][] numero = {{1,3,5}, {3,6,7}};
Fila 1 Fila 2
164164
Arreglos bidimensionales
Leyendo del usuario el contenido de una matriz de 3X3:
class LeerMatriz {
public static void main(String[] args){
double[][] A = new double[3][3];int i,j;i=0;while ( i< 3){
j=0;while(j< 3){
System.out.println("Dime un número?");A[i][j] = In.readDouble();j++;
}i++;
}
}}
165165
Arreglos bidimensionales
Mostrando una matriz de 3X3:i=0;while ( i< 3){
j=0;
while(j< 3){ System.out.println(A[i][j]); j++;}
i++;}
166166
Arreglos bidimesionales
Recuerden que tanto en arreglos unidimensionales como en matrices podemos ver a cada elemento como una variable. La diferencia está en que cuando creamos un matriz:
double[][] altura = new double[20][30];
Estamos creando 20x30 elementos (que podemos ver como variables) de una sola vez.
Por lo tanto podemos tratar a cada elemento igual como tratamos a una variable. double a,b;a = A[1][2] + A[0][0] + 3;b = A[1][2]*A[0][0];
167167
Operaciones de matrices
A B
B
+ = C
A =
i,j i,j i,j
32* C 1 2 34
5
6
1*4 + 2*5 + 3*6 = 32i
j
jk
168168
Ejemplo: Suma de matrices
class Suma{
public static void main(String[] args){
int[][] A ={{1,2,3,4}, {5,6,7,8}};int[][] B ={{1,4,5,6}, {4,8,9,7}};int[][] C = new int[2][4];int i,j;
for(i = 0; i < 2 ; i++){
for(j = 0; j < 4 ; j++)C[i][j] = A[i][j] + B[i][j];
}//Ahora imprimos cada fila de Cfor(i = 0; i < 2 ; i++){
for(j = 0; j < 4 ; j++){
System.out.print(C[i][j]+" ");}System.out.println();
}
}}
169169
Ejemplo: Multiplicación de Matrices
class MultMatrices
{
public static void main(String[] args)
{
int[][] A = {{2,3,8},{9,5,4},{7,8,3}};
int[][] B = {{1,4,7},{2,5,8},{3,6,9}};
int[][] C = new int[3][3];
int i,j,k,suma=0;
170170
Ejemplo: Multiplicación de Matrices
for(i=0; i< 3; i++){
for(j=0; j< 3; j++){
for(k=0, suma=0; k< 3; k++)suma = suma + A[i][k]*B[k][j];
C[i][j]= suma;}
}
for(i=0; i< 3; i++){
for(j=0; j< 3; j++)System.out.print(C[i][j]+ " ");
//Despues que terminamos con una fila nos//saltamos a la siguiente lineaSystem.out.println();
}
}}
171171
Arreglos multidimesionales
Hasta ahora hemos visto arreglos unidimensionales y bidimensionales. Sin embargo, podemos tener arreglos con las dimensiones que uno desee.
Por ejemplo, podemos tener arreglos de 3, 4 ó 5 dimensiones.
Por ejemplo:boolean[][][] A = new boolean[2][3][6];
Aquí hemos creado 2X3X6 elementos de tipo boolean.
int[][][][] B = new int[2][2][2][2];
Aquí hemos creado 2x2x2x2 elementos de tipo int.
172172
Strings: más métodos
Los métodos que veremos a continuación pueden ser útiles para hacer la tarea 1. Esto no quiere decir que necesiten cada uno de ellos, todo depende de cómo implementen su solución.
length()• Para obtener la longitud de un String
• Forma de usarlo s1.length()Donde s1 es un String
• Devuelve el largo del String (devuelve un int)
173173
Strings: más métodos
• Por ejemplo:String s1 = “hola”;
int a = s1.length();
En a guardamos el valor 4.
• Importante: No confundir con “length” de los arreglos, donde para llamarlo usamos notas.length, sin paréntesis. En los Strings usamos paréntesis.
esto devuelve 4
174174
Strings: más métodos
charAt()• Para obtener el carácter que se encuentra en una posición
cualquiera. Los índices van de 0 a length-1, igual que en los arreglos.
H o l a
• Forma de usarlo s1.charAt(índice)Donde s1 es un String e índice indica la posición del caracter que queremos obtener. En el caso del String “Hola” índice puede ser 0,1,2 ó 3.
• Devuelve el carácter en la posición indicada (devuelve un char).
índice 0 índice 3
175175
Strings: más métodos
• Por ejemplo:String s1 = “hola”;
char c = s1.charAt(1);
En c guardamos el char ‘o’.
esto devuelve ‘o’
176176
Strings: más métodos
class Ejemplo{
public static void main(String[] args)
{
String s = "Hola, ¿como estas?";
int i;
for (i=0; i<s.length(); i++)
System.out.println("caracter= " + s.charAt(i));
}
}
Imprime:
caracter= Hcaracter= ocaracter= lcaracter= acaracter= ,caracter= caracter= ¿caracter= ccaracter= ocaracter= mcaracter= ocaracter= caracter= ecaracter= scaracter= tcaracter= acaracter= scaracter= ?
177177
Strings: más métodos
equalsIgnoreCase()• Lo mismo que equals() pero no tiene en cuenta
mayúsculas o minúsculas.
• Devuelve true o false.
• Por ejemplo:
String s1= “Estrella”;
String s2 = “estrella”;
boolean a = s1.equalsIgnoreCase(s2);
En a guardaremos true.
178178
Strings: más métodos
indexOf() • Para saber la posición de un caracter particular en
un String.
• Forma de usarlo:s1.indexOf(caracter)
Donde s1 es un String y caracter es el caracter que estamos buscando en s1.
• Retorna la primera posición (el índice) en la cual se encuentra caracter en s1. Si caracter no se encuentra en s1 el método retorna -1
179179
Strings: más métodos
• Por ejemplo:String s = "Camarada";
int indice1 = s.indexOf('a');
int indice2 = s.indexOf('e');
En indice1 guardamos el valor 1 y en indice2 el valor -1.
180180
Strings: más métodos
indexOf() 2da version • Para saber la posición de un caracter particular en
un String, a partir de cierta posición.
• Forma de usarlo:s1.indexOf(caracter, índice)
Donde s1 es un String, caracter es el caracter que estamos buscando en s1 y índice es la posición desde la cual buscamos (de izquierda a derecha) a caracter.
• Retorna la primera posición (el índice) en la cual se encuentra caracter en s1 a partir de la posición indicada. Si caracter no se encuentra el método retorna -1.
181181
Strings: más métodos
• Por ejemplo:String s = "Camarada";
int indice1 = s.indexOf('a',3);
int indice2 = s.indexOf('e',1);
En indice1 guardamos el valor 3 y en indice2 el valor -1.
182182
Strings: más métodos
• Como pueden ver, este método se llama igual que el anterior, la única diferencia es que le damos dos argumentos. El primer argumento es el char que estamos buscando y el segundo argumento es la posición desde la cual queremos empezar a buscar.
s.indexOf('a',3);
• Si llaman a este método con dos argumentos Java sabe que se refieren a esta segunda versión del método indexOf().
argumento1 argumento2
183183
Strings: más métodos
• Por ejemplo:String s = "Mi alfombra";
int indice1 = s.indexOf('a',4);
int indice2 = s.indexOf('a');
int indice3 = s.indexOf('f',7);
int indice4 = s.indexOf('f');
System.out.println(indice1 + " " + indice2 + " "+
indice3 + " "+
indice4);
Esto imprime: 10 3 -1 5
184184
Java
Java Sun provee las especificaciones de Java a través de la Web.
Por ejemplo, las especificaciones de todos los métodos de la clase de los Strings se puede encontrar en:
http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html
185185
Java
186186
Java
Cuando quieran conocer las especificaciones de los métodos de alguna clase vayan a Google y escriban:
Nombre de la clase + java 1.4
Hagan click en el primer link que les aparezca.
Por ejemplo, lo pueden hacer para la clase Math, para la clase de los arreglos (Array) etc.
187187
Métodos
Clase Principal{ Método principal () {....} Método1() {....} Método2() {....} :}
188188
Métodos
Los métodos son funciones que pueden ser llamadas dentro de la clase o por otras clases.
• Reciben datos de entrada
• Generan datos de salida
Entrada Salida
Dos números X1,X2
SUMA
Método que suma dos números
X1+X2
189189
Métodos: Sintaxis
<ámbito> <tipo_retorno> <nombre_método> ( <lista_parámetros> ) {
<declaración_de_variables_locales> ;
<cuerpo_del_método> ;
return(<valor_retorno>) ;
}
En general, podemos clasificar los métodos en:• Aquellos que retornan un valor.
• Aquellos que no retornan nada.En estos casos se utiliza como tipo de retorno la palabra reservada void.
190190
Métodos
<ámbito> <tipo_retorno> <nombre_método> ( <lista_parámetros> )
<lista_paramétros>
• Valores que se entregan como entrada al método.
• Deben corresponder en cuanto a cantidad, posición y tipos a las variables que se definieron como parámetros de entrada en la definición del método.
• Si en la definición del método no se usó parámetro alguno, entonces en la llamada tampoco debe escribirse ninguna expresión o variable, pero los paréntesis deben aparecer.
191191
Métodos
Parámetros de entrada.• Materia prima con la que trabajará el método.
Valor de retorno• Resultado del procesamiento llevado a cabo por el
método.
Tanto los parámetros de entrada como el valor de retorno tienen un tipo de datos asociado.
192192
Métodos
Ejemplo de un método que no retorna nada:
public static voidpublic static void ImprimeSaludo ImprimeSaludo() ()
{{
System.out.println(“Hola”)System.out.println(“Hola”);;
}}
Instruccionesdel método
No tieneparámetros
NombreNo retorna nada,sólo imprime “Hola”en pantalla
193193
Métodos
Ejemplo de un método que retorna un valor:
public static public static doubledouble Area(double radio) Area(double radio)
{{
double area;double area;
area = 3.14 * radio * radio;area = 3.14 * radio * radio;
returnreturn area;area;
}}
retorna un valor de tipo double
Nombre
Tiene 1parámetrode tipo double llamado radio
Retorna el valor de area
194194
Métodos
Cuando creamos un método este debe estar dentro de una clase.
Por ejemplo, hasta ahora el tipo de clase que hemos usado es aquella donde tenemos al método principal.
Podemos incluir los métodos que creamos ya sea antes o después del método principal. El orden no importa.
Sólo podemos tener 1 método principal pues este es el que ordena la ejecución del programa.
195195
Métodos
class Ejemplo{
public static void main(String[] args){
....................
....................ImprimeSaludo();....................ImprimeSaludo();
}
public static void ImprimeSaludo() { System.out.println(“Hola”);}
}
196196
Métodos
Dependiendo de si el método retorna algo o no es como lo llamamos.
Con llamamos queremos decir que lo usamos. Si el método no retorna nada para llamarlo
simplemente escribimos el nombre del método seguido de paréntesis, como en el ejemplo anterior.
ImprimeSaludo();
197197
Métodos
class Ejemplo{
public static void main(String[] args){
ImprimeSaludo();ImprimeSaludo();
}
public static void ImprimeSaludo() { System.out.println(“Hola”);}
}
Hola
HolaImprime
198198
Métodos
Si el método retorna un valor lo podemos usar igual como usamos un valor o variable.
Por ejemplo:Le podemos asignar su valor a una variable:a= Area(2);
Podemos hacer operaciones:b= Area(2) + Area(3);
Podemos Imprimir:System.out.println(Area(5));
199199
Métodos
class Ejemplo{
public static void main(String[] args){
ImprimeSaludo();double a= Area(2);System.out.println(a);double b= Area(2) + Area(3);System.out.println(b);System.out.println(Area(5));
}
public static void ImprimeSaludo() { System.out.println("Hola");}
public static double Area(double radio) { double area; area = 3.14 * radio * radio; return area;}
}
Hola12.5640.8278.5
Imprime
200200
Métodos
public static double Celsius(double fahrenheit) {
double resultado;resultado= (fahrenheit-32.0)*(5.0/9.0);
return resultado;} public static double Fahrenheit(double celsius) { return((celsius*9.0/5.0)+32.0);}
201201
Ejemplos: Llamadas a métodos
double grados_celsius;
grados_celsius = Celsius(68) ; /* llamada */
double grados_farenheit ;
grados_farenheit = Fahrenheit(31) ; /* llamada */
double radio = 5.56 ;
double calculo_area ;
calculo_area = Area(5.56) ; /* llamada */
calculo_area = Area(radio) ; /* llamada */
202202
¿Para qué sirven los métodos?
No repetir lo mismo varias veces en el código.
Ordenar el código.
Comprender más fácilmente el código.
Separar trabajo entre programadores.
Realizar trabajos más complejos.
203203
Ejercicios
Desarrollar el siguiente método:
• Retorne 0 si un número es par y 1 si es impar.
Escriba el programa del Control 2 usando el método Factorial(). El cual recibe un número entero y retorna el factorial del número.
204204
Métodos: Orden de Instrucciones
Recuerden el orden en que se ejecutan las instrucciones, ya sean del método principal o los otros métodos:• Las instrucciones que se ejecutan en un programa
son aquellas del método principal. Estas se ejecutan de principio a fin.
• Las instrucciones de los métodos se ejecutan de principio a fin a menos que usemos return.
• Las instrucciones de otro método se ejecutan si en el método principal se llama a este otro método (este método a la vez puede llamar a otro).
205205
Métodos: Orden de Instrucciones
public static boolean esPar (int numero)
{
if(numero%2==0)
return true;
else
return false;
}
Si numero es par las instrucciones en este métodose terminan aquí
Si numero es impar las instrucciones en este métodose terminan aquí
206206
Métodos: Orden de Instruccionesclass Ejemplo{
public static void main(String[] args){
int num,resultado; 1System.out.println("Ingrese un numero"); 2num=In.readInt(); 3resultado= factorial(num); 8System.out.println("El factorial de "+ num+ " es " + 9
resultado);}
public static int factorial(int numero){
int factorial=1; 4for(int i =1; i<=numero; i++) 5
factorial= factorial*i; 6
return factorial; 7
}}
Los números indican el orden en que se ejecutan las instruccionesdel programa
207207
Métodos: return
• Si el método no retorna nada y queremos terminar la ejecución de sus instrucciones podemos usar simplemente:
return;
• Este tipo de return no lo podemos usar si el método devuelve algo pues nos daría un error de compilación. Si el método devuelve algo siempre debemos retornar un valor. Por ejemplo:
return 25;
208208
Métodos: return
Aca tenemos una versión del método factorial que no retorna nada, pues dentro del mismo método se le dice al usuario cual es el factorial del número que ingresó:
public static void factorial(int numero){
if (numero < 0) {
System.out.println("Debe ingresar un entero mayor que 0");
return; }
int factorial=1;for(int i =1; i<=numero; i++)
factorial= factorial*i;
System.out.println("El factorial de "+ numero+ " es "+ factorial);
}
Sin embargo,se recomienda, si se puede,usar una versióndel método quese ejecute de principio a fin
209209
Métodos: return
Esta versión se ejecuta de principio a fin (no necesariamente todas las instrucciones):
public static void factorial(int numero){
if (numero < 0)System.out.println("Debe ingresar un entero mayor que
0");
int factorial=1;
//Si numero < 0 las instrucciones del for no se ejecutan//pues i parte en 1, por lo tanto i no es menor que numerofor(int i=1; i<=numero; i++)
factorial= factorial*i;
if(numero>=0)System.out.println("El factorial de "+ numero+
" es "+ factorial);
}
210210
Métodos: return
Este ejemplo nos daría en error de compilación, pues en el encabezado estamos diciendo que el método va a devolver un int:
public static int factorial(int numero){
if (numero < 0) { System.out.println(“Debe ingresar un entero
mayor que 0”);return;
}
int factorial=1; for(int i =1; i<=numero; i++)
factorial= factorial*i; return factorial;
}
211211
Métodos: Parámetros
Ejemplo:
public static double exponente(double base, int exponente){
double resultado = 1;int i;for(i = 1; i <= exponente ; i++) resultado = resultado*base;
return resultado;}
Cuando decimos (double base, int exponente) estamos especificando la lista de parámetros del método. En este caso los parámetros son base y exponente.
212212
Métodos: Parámetros
Cuando llamamos al método, los valores con los que lo llamamos se le asignan a los parámetros del método en el orden respectivo:
double a= exponente (2.5, 6);
public static double exponente (double base, int exponente)
213213
Métodos: Parámetros
También podemos llamar a los métodos con variables o expresiones:
double a=4.5;int b=3;
double c= exponente (a,(b*2));
public static double exponente (double base, int exponente)
214214
Métodos: Parámetros
En Java los valores, variables o expresiones que usamos para llamar a un método primero se evalúan (en el caso de expresiones) y luego una copia de estos valores se le asigna a los parámetros.
A esto se le llama paso por valor. Importante: Por lo tanto cuando llamamos a
un método y usamos variables como argumentos lo que le estamos pasando al método es el valor de la variable NO LA VARIABLE.
215215
Métodos: Parámetrosclass EjemploParametros{
public static void main(String[] args){
double a, resultado;int b;System.out.println("Ingrese la base");
a=In.readDouble();System.out.println("Ingrese el exponente");
b=In.readInt();resultado= exponente(a,b);System.out.println("El resultado es "+ resultado);
}
public static double exponente(double base, int exponente){
double resultado = 1;int i;for(i = 1; i <= exponente ; i++) resultado = resultado*base;return resultado;
}}
216216
Métodos: Parámetros
Veamos que sucede paso a paso:
double a, resultado;
int b;
Creamos tres variables
a b resultado
217217
Métodos: Parámetros
System.out.println("Ingrese la base");
a=In.readDouble();
System.out.println("Ingrese el exponente");
b=In.readInt();
Le asignamos un valor a “a” y “b”, dependiendo de lo que ingrese el usuario. Por ejemplo:
3.0 4
a b
218218
Métodos: Parámetros
resultado= exponente(a,b);
public static double exponente(double base, int exponente)
Llamamos al método exponente y luego le
asignamos a resultado el valor que devuelva este método.
Al llamar al método le asignamos a los argumentosdel método los valores de las variables a y b.3.0
4
a
b
3.0
4
base
exponente
219219
Métodos: Parámetros
Finalmente le asignamos a resultado lo que devuelva para este caso exponente.
¿Por qué es importante saber que significa paso por valor?
Porque si dentro del método cambiamos el valor de los parámetros del método esta acción no cambiará el valor de las variable que usamos como argumentos del método.
81.0
resultado
220220
Métodos: Parámetros
class EjemploParametros{
public static void main(String[] args){
double a, resultado;System.out.println("Ingrese el numero");a=In.readDouble();resultado= dobleNum(a);System.out.println("El doble del numero es "+
resultado);}
public static double dobleNum(double numero){ numero= 2*numero;
return numero;}
}
En este ejemplo la variable a es el argumento con el que llamamos al método.
El parametro del metodo es numero.
221221
Métodos: Parámetros
double a, resultado;
System.out.println("Ingrese el numero");a=In.readDouble();
a resultado
a El usuario le asigna un valor a a8.5
222222
Métodos: Parámetros
resultado= dobleNum(a);
public static double dobleNum(double numero)
Primero se llama al método y luegose le asigna lo que retorna a resultado
a numero
8.5 8.5
numero ahoratiene el mismovalor de a
223223
Métodos: Parámetros
numero= 2*numero;
return numero;
resultado= dobleNum(a);
a numero
8.5 17.0numero ahora cambia su valorpero a no cambió su valor
resultado numero
17.0 17.0Finalmente a resultado se le asigna lo que retornael método. En este casolo que retorna el método es elvalor de numero
224224
Ámbito de las variables
El ámbito de una variable es aquel donde se reconoce a la variable.
Una variable es reconocida dentro del block donde se le declaró.
Un block es determinado por llaves. Ejemplo de blocks:
class Ejemplo{
}
public static void main (String[] args){
}
while(n!=-1){
}
225225
Ámbito de las variables
Es decir, si yo declaro una variable dentro de un while, esta variable es reconocida sólo dentro del while. Fuera del while es como si nunca hubiese existido.
class Ejemplo{
public static void main(String[] args){
int i =0;while (i<10){
int resultado= 1;resultado= resultado +i;
}
System.out.println(resultado);}
}
Sólo aquí sereconocea la variableresultado
Por lo tanto estoproduce un error
226226
Ámbito de las variables
Cuando compilamos este programa nos encontramos con este mensaje:
resultado cannot be resolved También podemos afirmar que una variable
creada dentro de un método sólo es reconocida dentro del método.
Es por esta razón que podemos tener dos variables con el mismo nombre en el método principal y en otro método.
En este caso lo que sucede es que tenemos dos variables distintas que se llaman igual, pero entre ellas no hay ninguna relación.
227227
Ámbito de las variables
class EjemploParametros{
public static void main(String[] args){
double numero, resultado;System.out.println("Ingrese el numero");
numero=In.readDouble();resultado= dobleNum(numero);System.out.println("El doble del numero es "+
resultado);System.out.println(numero);
}public static double dobleNum(double numero){ numero= 2*numero;
return numero;}
}
Si el usuario ingresa 3:
¿Qué se imprime aquí?
¿3 ó 6?Se imprime 3 pues la variable numero del main y la variable numero del método dobleNum son dos variables distintas.
228228
Ámbito de las variables
double numero, resultado;
System.out.println("Ingrese el numero");numero=In.readDouble();
numero resultado
numero El usuario le asigna un valor a numero8.5
229229
Ámbito de las variables
resultado= dobleNum(numero);
public static double dobleNum(double numero)
Primero se llama al método y luegose le asigna lo que retorna a resultado
numero numero
8.5 8.5
Ambas variables sellaman igual y ahoratienen el mismo valorpero son dos variables distintas y lo que le pase auna no afectará a la otra
método dobleNum
main
230230
Ámbito de las variables
numero= 2*numero;
return numero;
resultado= dobleNum(numero);
numero numero
8.5 17.0numero ahora cambia su valorpero la variable numerodel main no cambió su valor
resultado numero
17.0 17.0Finalmente a resultado se le asigna lo que retornael método. En este casolo que retorna el método es elvalor de numero
main
8.5
main
231231
Ámbito de las variables
System.out.println(numero);
Aquí se imprime 8.5 pues estamos haciendo referencia a la variable que el que es reconocida en el método main.
8.5main
232232
Métodos que llaman a otros métodos
El método principal (main) puede llamar a otros métodos y estos a su vez pueden llamar a otros.
En el ejemplo de la guía que vimos hoy tenemos
class Loteria{ public static void main(String[]args) {
} public static double combinaciones(int n, int k) {
}
public static double factorial (int numero) { }}
233233
Métodos y Arreglos
Como vimos anteriormente, cuando llamamos a un método. Java usa el paso por valor
Pero los objetos que conocemos hasta ahora no guardan un valor.
Los objetos que conocemos hasta ahora son los Strings y los Arreglos.
Entonces ¿Cúal es el valor que estamos pasando cuando pasamos un objeto?
234234
Métodos y Arreglos
Una variable que es declarada como un arreglo en realidad es una referencia a un arreglo. Por lo tanto esta variable el valor que guarda es una referencia.
Cuando uno de los parámetros de un método es un arreglo ( ya sea unidimensional o multidimensional) lo que le estamos pasando al método es una referencia a ese arreglo.
El siguiente método recibe un arreglo e intercambia los elementos de las posiciones i y j.
public static void swap(double[] A, int i, int j){
double temp;temp= A[i];A[i]= A[j];A[j]=temp;
}
235235
Métodos y Arreglos
class Ejemplo{
public static void main(String[] args){
double[] a= {1.0, 2.4, 5.6, 4.5, 6.7};int i;swap(a,0,3);for(i=0; i< a.length; i++)
System.out.print(a[i]+ " ");}public static void swap(double[] A, int i, int j){
double temp;temp= A[i];A[i]= A[j];A[j]=temp;
}}
¿Qué imprime este método?
236236
Métodos y Arreglos
double[] a= {1.0, 2.4, 5.6, 4.5, 6.7};
Creamos una variable a y un arreglo de cinco elementos. La variable a hace referencia al arreglo.
1.0 2.4 5.6 4.5 6.7a
237237
Métodos y Arreglos
swap(a,0,3);
public static void swap(double[] A, int i, int j)
1.0 2.4 5.6 4.5 6.7a
A
0 3i j
238238
Métodos y Arreglos
double temp;
temp= A[0];
A[0]= A[3];
A[3]=temp;
4.5 2.4 5.6 1.0 6.7a
A
239239
Métodos y Arreglos
for(i=0; i< a.length; i++)
System.out.print(a[i]+ " ");
Imprime el arreglo a, el cual hace referencia al mismo arreglo A del método swap. Por lo tanto los elementos de a en las posiciones 0 y 3 fueron intercambiados. El programa imprime:
4.5 2.4 5.6 1.0 6.7
240240
Matrices como arreglos
Cuando creamos una matriz en realidad lo que estamos creando es un arreglo de arreglos.
Por ejemplo, si escribimos:int[][] a;Lo que creamos es una variable a que hace referencia a un arreglo, no a una matriz.
a
241241
Matrices como arreglos
Luego cuando escribimos:a= new int[3][4];Lo que creamos es un arreglo de tres elementos, a[0], a[1], a[2].
a
a[0]
a[1]
a[2]
242242
Matrices como arreglos
Donde cada elemento a[i] hace referencia a un arreglo de 4 elementos de tipo int. Estos elementos Java los inicializa en 0 automáticamente.
0 0 0 0
a
a[0]
a[1]
a[2]
0 0 0 0
0 0 0 0
Aquí está lamatriz
243243
Matrices como arreglos
Por este motivo, podemos referirnos a la primera fila de una matriz como si nos refiriéramos a un arreglo.
En el ejemplo anterior la primera fila de la matriz a sería a[0], donde a[0] hace referencia a un arreglo de 4 elementos tipo int. 0 0 0 0a[0]
244244
Matrices como arreglos
class Ejemplo{
public static void main(String[] args){
int[][] A={{1,2,3}, {4,5,6}, {7,8,9}};int[] b= A[0];
int i;for(i=0; i< b.length; i++)System.out.println(b[i]);
}} Veamos paso a paso lo que sucede durante la
ejecución de este programa
245245
Matrices como arreglos
int[][] A={{1,2,3}, {4,5,6}, {7,8,9}};
1 2 3
A
A[0]
A[1]
A[2]
4 5 6
7 8 9
Creamos una variable A que hace referencia a un arreglode tres elementos A[0], A[1] y A[2]. Cada uno de estos elementos a su vez hace referencia a un arreglo de tres elementos de tipo int.
246246
Matrices como arreglos
int[] b= A[0];Luego creamos una variable b que hace referencia al mismo arreglo que hace referencia A[0], es decir la primera fila de la Matriz A.
1 2 3
A
A[0]
A[1]
A[2]
4 5 6
7 8 9
b
247247
Matrices como arreglos
int i;for(i=0; i< b.length; i++)System.out.println(b[i]);
Finalmente imprimimos el arreglo b. Este programa imprime:123
248248
Matrices como arreglos
class Ejemplo{
public static void main(String[] args){
int[][] A={{1,2,3,4}, {5,6,7,8}, {9,1,2,3}};int i, j;for(i=0; i< A.length; i++){
for(j=0; j< A[0].length; j++){
System.out.print(A[i][j]+" ");}System.out.println();
}
}} Veamos paso a paso lo que sucede durante la ejecución de
este programa
249249
Matrices como arreglos
int[][] A={{1,2,3,4}, {5,6,7,8}, {9,1,2,3}};
1 2 3 4
A
A[0]
A[1]
A[2]
5 6 7 8
9 1 2 3
250250
Matrices como arreglos
for(i=0; i< A.length; i++)
Fijamos la fila i para empezar a movernos por la matriz. Usamos el largo de A, pues este largo nos indica el numero de filas que tiene la matriz.
1 2 3 4A A[0]
A[1]
A[2]
5 6 7 8
9 1 2 3Este es el largo al que hacemosreferencia al decir A.length
251251
Matrices como arreglos
for(j=0; j< A[0].length; j++)Una vez fijada la fila i, fijamos la columna j. Para saber el número de columnas usamos el largo del arreglo A[0] pues este largo nos indica el número de columnas que tiene la matriz A. Podríamos haber usado A[1] o A[2] en vez de A[0], cualquiera de los tres nos habría servido.
1 2 3 4A A[0]
A[1]
A[2]
5 6 7 8
9 1 2 3
252252
Matrices como arreglos
System.out.print(A[i][j]+" ");
}
System.out.println();
Finalmente imprimimos uno a uno los elementos de la matriz saltándonos a la siguiente línea cuando terminamos con una fila. Esto imprime:
1 2 3 4 1 2 3 4
5 6 7 8 5 6 7 8
9 1 2 3 9 1 2 3
253253
Matrices como arreglos
En resumen lo que necesitamos saber es que:1.Podemos ver cada fila de la matriz como una arreglo
en caso de que lo necesitemos, como por ejemplo en la segunda parte de la Pregunta 2 de la tarea.
2.El número de filas es igual a: nombre_matriz.length. Por ejemplo:
A.lengthA.length
3.El número de columnas se obtiene especificando una fila. Por ejemplo:
A[0].lengthA[0].length
254254
Strings: método valueOf
Hasta ahora hemos conocido los métodos:• equals()
• equalsIgnoreCase()
• compareTo()
• chatAt()
• indexOf()
• length()
Hoy vamos a conocer el método valueOf()Este método nos permite convertir un tipo de dato primitivo (char, int, double, boolean) a un String. También nos permite convertir un arreglo de caracteres a un String.
Este método se vuelve útil más adelante cuando queramos escribir o leer en un archivo.
255255
Strings: método valueOf
En los métodos anteriores, no necesitábamos especificar que los métodos eran de la clase String pues los llamábamos con un objeto de tipo String. Por ejemplo:
String s= "Botella";
int a= s.length();
char b= s.charAt(2);
int c= s.indexOf(a);
Este es nuestroobjeto de tipoString
Aquí ocupamosal String s parallamar a estosmétodos de la clase String
256256
Strings: método valueOf
Sin embargo, cuando ocupamos el método valueOf lo que vamos a hacer es llamar al método con un argumento que es de tipo primitivo (int, double, char, boolean etc) o con un arreglo de caracteres. Por lo que sí debemos especificar la clase donde se encuentra este método.
String.valueOf(a)
Donde a es un tipo de dato primitivo, un arreglo de caracteres, etc (existen más versiones de este método pero no las veremos aquí). Este método devuelve un String.
257257
Strings: método valueOf
Por ejemplo:int a= 345;
String s1= String.valueOf(a);
Lo que estamos haciendo es asignarle al String s1 lo que devuelve el método valueOf(), como el método devuelve un String (mejor dicho una referencia a un objeto String), lo que devuelve se lo podemos asignar a s1 sin problemas.
345
“345”
a s1
258258
Strings: método valueOf
class Ejemplo{
public static void main(String[] args){
int a= 345;String s1= String.valueOf(a);System.out.println(s1);
double b= 3.456;String s2= String.valueOf(b);System.out.println(s2);
Fíjense que para elmétodo valueOf()debemos especificarla clase
259259
Strings: método valueOf
char c= 'a';
String s3= String.valueOf(c);
System.out.println(s3);
boolean d= true;
String s4= String.valueOf(d);
System.out.println(s4);
char[] e={'a','b','c','d'};
String s5= String.valueOf(e);
System.out.println(s5);
}
}
Este programa imprime:3453.456atrueabcd