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...
1
Introducción Clase Principal { Método principal () {....} Método1() {....} Método2() {....} : } 2
Primer Programa en Java class Saludo { //Este programa imprime Bienvenidos a ING1310 public static void main(String[] args) { System.out.println("Bienvenidos a ING1310!"); } }
3
Primer Programa en Java
...
Clase Principal { Método Principal () {....} Método1() {....} }
class Saludo { public static void main(String[] args) { System.out.println("Bienvenidos a ING1310!"); } }
4
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. 5
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’. 6
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 class Saludo principal. { public static void main(String[] args) { System.out.println("Bienvenidos a ING1310!"); } }
7
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!"); } } 8
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.
9
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.
10
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.
11
Como Imprimir en Pantalla System.out.print(“...”);
“”.
Imprime lo que está contenido entre
Qué imprime?
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 ? 12
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");
13
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
14
Como Imprimir en Pantalla Escriban un programa que imprima en
pantalla: Hola a todos, Hoy no habrá clases. Atte. Jorge Salas.
15
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.
16
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
17
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.
18
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 19
Identificadores: Ejemplos Los siguientes son identificadores inválidos: 1texto nombre-empleado while
20
Tipos de datos en Java •Enteros: Ocuparemos estos
•Reales:
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
21
Tipos de datos en Java Caracteres:
char: ‘a’,‘z’,‘?’,‘$’,‘@’,‘G’,´7’, …; Los caracteres del código Unicode. Booleano:
boolean: true o false
22
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.
23
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.
24
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 ); } }
¡Usa variables! Hace cálculos
intermedios. 25
Variables En el programa anterior introducimos tres conceptos nuevos: • Variables. • Imprimir el valor de variables en pantalla. • Cálculos. El doble del número 4 es: 8
26
Variables Forma genérica para declarar una variable:
[= ]; : Tipo estándar (int, float, char, boolean, etc.). : Puede corresponder a una constante del tipo entero, real, caracter, etc. []: significa opcional.
27
Variables Ejemplos de declaraciones de variables:
• int numero; • char inicial; Ejemplos de declaraciones de variables
asociadas a un dato:
• int numero = • char inicial
10; = ‘G';
28
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.
29
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.
30
Variables
class Doble { public static void main(String[] args) { int numero; int doble; numero = 4; doble = 2*numero;
Creamos variables
Les asignamos un valor
System.out.println("El doble del número " + numero + " es: " + doble ); } }
31
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.
32
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 .
33
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
34
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. 35
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 ); } }
• Variables. • Imprimir el valor de variables en pantalla. • Cálculos.
36
Variables: Imprimir Para imprimir variables usamos los mismos
métodos que usábamos para imprimir una oración: System.out.print() System.out.println()
37
Variables: Imprimir Ejemplo: Imprimir una variable en pantalla
class Imprimir { public static void main(String[] args) { int numero; System.out.println(numero); } }
¿Cúal es el error aquí?
38
Variables: Imprimir Ejemplo: Imprimir una combinación de
variables y oraciones.
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.”); } }
39
Variables: Imprimir Hagan un programa que imprima en pantalla
su edad. Yo tengo 20 años
40
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 ); } }
• Variables. • Imprimir el valor de variables en pantalla. • Cálculos.
41
Expresiones Aritméticas Operadores binarios + * /
Suma Resta Multiplicación División
Operadores unitarios - Signo negativo + Signo positivo
42
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 43
Expresiones Aritméticas Si tenemos
+5*8 - (4 - 3). El orden sería:
5*8 – (4 - 3) 5*8 – 1 40 – 1 39 Recomendación: Siempre usen paréntesis. Por ejemplo: ¿Cómo se interpreta 3/4*2?
44
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)
45
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
46
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
47
Expresiones Aritméticas Ejemplos: 7/4 = ? 7/2.0 = ? -7 + 4 = ? 3.0 + 4 = ? (-3)/(-4) = ? 6/18 = ? 48
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.
49
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
50
Expresiones Aritméticas 4 + 5/2.0 = ? 4.0 + 5/2 = ? 8 + 7/2*5.0 = ? 5/6-6*2/15 = ?
51
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 = ?
52
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.
Ejemplos 7%3 = 1 4%2 = 0 -13%7 = -6 13%-7 = 6 53
Expresiones Aritméticas Precedencia hasta ahora
( )
cast *
/
%
+
-
Le podemos asignar el valor de una expresión
aritmética a una variable.
class Ejemplo { public static void main(String[] args) { double a; a = 6 + 4.0*3; System.out.println(a); } }
¿Qué pasa si declaramos a la variable a como un int? 54
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 •a •a •b
= = = =
b*3; b; (int)*12.2 – c*b; a*5-4; 55
Expresiones Aritméticas 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.
56
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;
?
57
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 = ?
58
Expresiones Aritméticas: char Si tenemos int a= ‘B’ ;
Java guardará el valor numérico correspondiente a ‘B’ en la variable a.
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 Esto produce un error de tipo char. char c = ‘B’; c = c+1; 59
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.
60
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’;
?
61
Expresiones Aritméticas: char C Dec har blan 32 k ! 33
C har 0
Dec
Dec
48
C har @
Dec
64
C har a
1
49
A
65
b
98
”
34
2
50
B
66
c
99
#
35
3
51
C
67
d
100
$
36
4
52
D
68
e
101
%
37
5
53
E
69
f
102
&
38
6
54
F
70
g
103
’
39
7
55
G
71
h
104
(
40
8
56
H
72
i
105
)
41
9
57
I
73
z
122
*
42
:
58
Z
90
{
123
97
62
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()
63
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.”); } }
64
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);
65
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.
66
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.
¿Qué pasara?
class Ejemplo { public static void main(String[] args) { double b =-3; int a = Math.abs(b); System.out.println(a); } }
67
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
68
Métodos Math Math.pow
• Calcula a donde a y b son los argumentos. • Ejemplo: Math.pow(4,10). • Siempre retorna un valor de tipo double. b,
int a = Math.pow(2,4); ¿Problema? double b = Math.pow(-5, 0.5);
¿Problema?
69
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); } }
70
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 71
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.
72
Expresiones lógicas (booleanas) class Ejemplo { public static void main(String[] args) { boolean a = 3 > 5; System.out.println(a); } }
73
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?
74
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);
75
Expresiones lógicas (booleanas) Precedencia: < <= >= > == != ! && ||
Asociatividad: De izquierda a derecha.
76
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)
77
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
78
Expresiones lógicas (booleanas) La precedencia de todos los operadores ( ) ! * / % + < <= >= > == != && || =
Lo mejor es SIEMPRE usar paréntesis
79
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?
80
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/4 Pero no podemos tener: 1/2== 4!=3
81
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’ ....
82
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 decir
boolean a = 3 < ‘b’;
83
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.”); } }
84
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. 85
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. Indica el método de la clase
Esta clase tiene los siguientes métodos: readInt In.readInt readDouble In.readDouble readChar In.readChar readLine In.readLine readFloat In.readFloat
In.readInt Indica la clase
86
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.");
87
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
88
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); } }
89
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. 90
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"); } } 91
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 - promedio - promedio
de de de
las tareas los laboratorios las pruebas.
El programa debería pedirle al usuario que
ingrese lo que está en negrita. 92
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();
93
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");
}
94
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).
95
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 else if (nota >= 4.0) System.out.println("El else if (nota >= 3.8) System.out.println("El else System.out.println("El
alumno aprobo en forma destacada"); alumno aprobo"); alumno reprobo con derecho al recuperativo"); alumno reprobo");
} }
96
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 int int int
num_rifa; premio_mayor = 123; segundo_premio = 326; tercer_premio = 784;
97
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"); } }
98
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 int int int
num_rifa; premio_mayor = 123; segundo_premio = 326; tercer_premio = 784;
99
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"); }
}
100
Variación: if/else if/else IMPORTANTE: un else siempre se asocia con
el último if, a menos que usemos llaves {}.
if ( a < 5) if (a < 3) System.out.println (“Si”); else System.out.println(“No”);
Si a = 6 ¿Qué imprime este programa?
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.
101
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 este programa?
102
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
Pero también podemos indentar para que visualmente quede claro a que if hace referencia el else.
if ( a < 5) { if (a < 3) System.out.println (“Si”); else System.out.println(“No”); }
if ( a < 5) if (a < 3) System.out.println (“Si”); else System.out.println(“No”);
(Estos 3 ejemplos son equivalentes) 103
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. 104
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;
105
Strings Cuando creamos una variable de tipo String lo
que estamos creando es una referencia. s 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 s = “Hola”;
“Hola”
106
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”;
a 3 s
“Hola”
107
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
s2 “Hola”
108
Strings int a = 1; int b = 2; a = b; b = 4; System.out.println(a + " " + b); String s1 = "Blanco"; String s2 = "Azul"; s1 = s2; s2 = "Rojo"; System.out.println(s1 + " " + s2);
¿Qué imprime esto?
¿Qué imprime esto?
109
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
s2
“Hola”
110
Strings ¿Cúal es el valor de a? String s1 = “Rojo”; String s2 = “Rojo”; boolean 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 s caso: “Rojo”
s
“Rojo”
Por lo tanto a es false
111
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.
112
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);
false false true false
a = s2.equals(" Luna"); System.out.println(a); } }
113
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. 114
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 115
Strings class 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);
Imprime
-1 -32 44 1 11
a = s1.compareTo("Luce"); System.out.println(a); } } 116
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.
117
Instrucción while class Contar { public static void main(String[] args) { //Este programa cuenta de 1 a n //donde n es dado por el usuario int 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; } } }
118
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.
119
Instrucción while Cuando usamos esta instrucción es útil saber
que: n=n+1 n=n-1
es equivalente a n++ 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++; }
120
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 usuario pregunte cuantas veces quiera? 121
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"); } } 122
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?
123
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
124
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;
125
Ejemplo: Números Pitagóricos while (b < a && solucion == false) { c=1; while(c
126
Instrucción for for ( inicialización ; expresión-booleana ; actualización ) { ... Bloque de instrucciones ... } 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).
127
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); 128
Instrucción for Útil en ciclos en que se conoce de antemano
el número de iteraciones a realizar. Contar de 0 a 99: for (int i = 0 ; i < 100 ; i++) System.out.println("i = " + i);
¿Contar de 100 a 1?
129
Instrucción for: Ejemplo1 class Ejemplo { public static void main(String[] args) { int i; //Cuenta hasta 10 for (i = 0 ; i < 10 ; i++) System.out.println("i = " + i); int rep; //multiplos de 5 en forma ascendente //hasta 100 System.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 100 System.out.println("Estos son los multiplos de 5 desde 100 "); for (rep=100 ; rep rel="nofollow">=0 ; rep=rep-5) System.out.println(rep); } }
130
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); } }
131
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
132
Instrucción for for ( inicialización ; expresión-booleana ; actualización )
Aquí puedo agregar las expresiones que quiera pero debo separar con comas.
Por ejemplo: for(i=1, j=0, k=3; i<=2 && j<=5 && k<10; i++, j++, k++) System.out.println(i+ “ ”+ j + “ ” + k);
Imprime 1 0 3 2 1 4
133
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.
134
Arreglos: Declaración y Construcción Declaración [] ; int[] a;
nombre
Construcción = new []; a = new int[20];
Arreglo
135
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.
Arreglo valores
10
21
32
83
23
posición
0
1
2
3
n-1
136
Arreglos: Declaración y Construcción Declaración y Construcción [] = new [];
int[] a = new int[20];
Declaración y Construcción (con asignación) [] = {valor1, valor2, ...};
int[] edades = {17,19,21,20,18};
137
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";
138
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;
139
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:
.length
Por ejemplo, si tenemos: double[] peso = new double[25]; int a = peso.length;
En a guardamos el valor 25. 140
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. 141
Arreglos Mostrando un arreglo mediante un ciclo for: for (i=0; i
Sumando dos elementos de un arreglo double a = A[1] + A[3];
142
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
143
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.
144
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;
145
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;
146
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] rel="nofollow"> max) max = notas[i]; } diferencia = max-min;
147
Arreglos //Notas bajo 4.0 for(i=0; i< num_notas; i++) { if (notas[i] < 4.0) bajo_4++; } //Promedio for(i=0; i< num_notas; i++) { suma= suma+notas[i]; } prom= suma/num_notas;
148
Arreglos //Finalmente imprimimos todo, siempre y cuando se haya ingresado //al menos una nota if(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"); } }
149
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. 150
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.
151
Arreglos Al igual que los Strings, los arreglos son
objetos, por lo tanto cuando declaramos un arreglo 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 peso un arreglo de enteros.
152
Arreglos Para crear un arreglo de 10 enteros necesitamos
escribir: peso
peso = new int[10]; 0 0 0 0 0 0 0 0 0 0
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
153
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
154
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.
A
0 0. 0
1
2
3
4
5
6
0. 0
0. 0
0. 0
0. 0
0. 0
0. 0
7 0. 0
8
9
0. 0
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
155
Arreglos B=A; A y B harán referencia al mismo arreglo
A
0 0. 0
1
2
3
4
5
6
0. 0
0. 0
0. 0
0. 0
0. 0
0. 0
7 0. 0
8
9
0. 0
0. 0
B
A[4]= 4.5; Cambiamos de 0.0 a 4.5 el 5to elemento del arreglo A.
A
0 0. 0
1
2
3
4
5
6
7
8
0. 0
0. 0
0. 0
4.5
0.0
0.0
0.0
0.0
9
B
0.0
156
Arreglos System.out.println(B[4]); ¿Qué se imprime en pantalla?
4.5 double[] C = {1.0,2.0,3.0}; Creamos una variable C que apunta a un arreglo de 3 elementos de tipo double.
C
0
1
2
1. 0
2. 0
3. 0
157
Arreglos B=C; A
0 0. 0
1
2
3
4
5
6
7
8
0. 0
0. 0
0. 0
4.5
0.0
0.0
0.0
0.0
C
9 0.0
B 0
1
2
1. 0
2. 0
3. 0
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. 158
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.0 2.0 3.0
4.5 1.0 2.0 3.0
159
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
160
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
161
Ejemplo: Notas de alumnos Alumnos 0
Diaz, Bruno
1
Doe, John
2
Perez, Juan
3
Quiroz, Ana
4
Rios, Luis
5
Salas, Marco
6
Tapia, Jorge Yang, Li
I1 I2 I3 I4 Promedio 0
1
2
3
4
0 3. 1 5 4.
4. 3 5.
5. 3 5.
5. 8 4.
4 .72 4
2 3 5. 3 2 6.
2 4. 5 4.
1 3. 4 3.
3 6. 2 5.
.72 4 .82 4
4 2 5. 5 4 5.
1 3. 2 4.
4 6. 5 6.
6 4. 8 5.
.82 4 .97 5
6 8 5. 3
9 4. 4
2 6. 4
8 3. 2
.67 4 .82
[4][2] 6. 5
162
Arreglos bidimensionales Declaración
• String[][]
tablero;
Construcción
• tablero
= new String[16][16];
Podemos declarar y construir al mismo tiempo
• String[][]
Inicialización
• int[][]
tablero = new String[20][30];
2x3
numero = {{1,3,5}, {3,6,7}}; Fila 1
Fila 2 163
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++; } } }
164
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++; }
165
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];
166
Operaciones de matrices
+B
A j i
A
j 1
2
3
i,j
i,j
i,j
* B
k 4 5
=C 1*4 + 2*5 + 3*6 = 32
= C
32
6
167
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 C for(i = 0; i < 2 ; i++) { for(j = 0; j < 4 ; j++) { System.out.print(C[i][j]+" "); } System.out.println(); } } }
168
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;
169
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 linea System.out.println(); } } } 170
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.
171
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)
172
Strings: más métodos • Por ejemplo: String s1 = “hola”; int a = s1.length(); esto devuelve 4 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.
173
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. Hola índice 0
índice 3
• 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 char).
posición indicada (devuelve un
174
Strings: más métodos • Por ejemplo: String s1 = “hola”; char c = s1.charAt(1); esto devuelve ‘o’ En c guardamos el char ‘o’.
175
Strings: más métodos class Ejemplo
Imprime:
{ 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)); } }
caracter= caracter= caracter= caracter= caracter= caracter= caracter= caracter= caracter= caracter= caracter= caracter= caracter= caracter= caracter= caracter= caracter= caracter=
H o l a , ¿ c o m o e s t a s ?
176
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.
177
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
178
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.
179
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.
180
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.
181
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); argumento1
argumento2
• Si llaman a este método con dos argumentos Java sabe que se refieren a esta segunda versión del método indexOf().
182
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
183
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
184
Java
185
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.
186
Métodos Clase Principal { Método principal () {....} Método1() {....} Método2() {....} : } 187
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
Método que suma dos números Entrada Dos números X1,X2
X1+X2
Salida SUMA
188
Métodos: Sintaxis <ámbito> <nombre_método> ( <lista_parámetros> ) { <declaración_de_variables_locales> ; <cuerpo_del_método> ; return() ; }
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.
189
Métodos <ámbito> <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.
190
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.
191
Métodos Ejemplo de un método que no retorna nada: No retorna nada, sólo imprime “Hola” en pantalla
Nombre
No tiene parámetros
public static void ImprimeSaludo() { System.out.println(“Hola”); }
Instrucciones del método
192
Métodos Ejemplo de un método que retorna un valor: Tiene 1 parámetro de tipo double llamado radio
retorna un valor de tipo double Nombre
public static double Area(double radio) { double area; area = 3.14 * radio * radio; return area; } Retorna el valor de area
193
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. 194
Métodos class Ejemplo { public static void main(String[] args) { .................... .................... ImprimeSaludo(); .................... ImprimeSaludo(); } public static void ImprimeSaludo() { System.out.println(“Hola”); }
}
195
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();
196
Métodos class Ejemplo { public static void main(String[] args) { ImprimeSaludo(); ImprimeSaludo(); } public static void ImprimeSaludo() { System.out.println(“Hola”); } }
Hola
Imprime
Hola
197
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));
198
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
Imprime
Hola 12.56 40.82 78.5
ImprimeSaludo()
System.out.println("Hola"); } public static double Area(double radio) { double area; area = 3.14 * radio * radio; return area; } }
199
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); }
200
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 */
201
¿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.
202
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.
203
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).
204
Métodos: Orden de Instrucciones public static boolean esPar (int numero) { if(numero%2==0) Si return true; else return false; }
numero es par las instrucciones en este método se terminan aquí
Si numero es impar las instrucciones en este método se terminan aquí
205
Métodos: Orden de Instrucciones class Ejemplo { public static void main(String[] args) { int num,resultado; System.out.println("Ingrese un numero"); num=In.readInt(); resultado= factorial(num); System.out.println("El factorial de "+ num+ " es " + resultado); } public static int factorial(int numero) { int factorial=1; for(int i =1; i<=numero; i++) factorial= factorial*i; return factorial; } }
1 2 3 8 9
4 5 6 7
Los números indican el orden en que se ejecutan las instrucciones del programa 206
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;
207
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ón del método que se ejecute de principio a fin
208
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 numero for(int i=1; i<=numero; i++) factorial= factorial*i; if(numero>=0) System.out.println("El factorial de "+ numero+ " es "+ factorial); }
209
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; }
210
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.
211
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)
212
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)
213
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.
214
Métodos: Parámetros class 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; } } 215
Métodos: Parámetros Veamos que sucede paso a paso: double a, resultado;
int b;
a
b
resultado
Creamos tres variables
216
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: a
b
3.0
4
217
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 argumentos del método los valores de las variables a y b. 3.0 base a 3.0 b
4
exponente
4 218
Métodos: Parámetros Finalmente le asignamos a resultado lo que devuelva para este caso exponente. resultado
81.0
¿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. 219
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.
220
Métodos: Parámetros double a, resultado;
a
resultado
System.out.println("Ingrese el numero");
a=In.readDouble();
a 8.5
El usuario le asigna un valor a a
221
Métodos: Parámetros resultado= dobleNum(a);
Primero se llama al método y luego se le asigna lo que retorna a resultado public static double dobleNum(double numero) a
8.5
numero
8.5
numero ahora tiene el mismo valor de a
222
Métodos: Parámetros numero= 2*numero;
return numero; a
8.5
numero
17.0
numero ahora cambia su valor pero a no cambió su valor
resultado= dobleNum(a); resultado
numero
17.0
17.0
Finalmente a resultado se le asigna lo que retorna el método. En este caso lo que retorna el método es el valor de numero 223
Á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) {
}
}
}
224
Á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; }
Sólo aquí se reconoce a la variable resultado
System.out.println(resultado); } }
Por lo tanto esto produce un error 225
Á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. 226
Á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); Si el usuario ingresa System.out.println(numero); 3: ¿Qué se imprime } aquí? public static double dobleNum(double numero) ¿3 ó 6? { numero= 2*numero; Se imprime 3 pues la return numero; variable numero del } main y la variable } numero del método dobleNum son dos variables distintas. 227
Ámbito de las variables double numero, resultado;
numero
resultado
System.out.println("Ingrese el numero");
numero=In.readDouble();
numero 8.5
El usuario le asigna un valor a numero
228
Ámbito de las variables resultado= dobleNum(numero);
Primero se llama al método y luego se le asigna lo que retorna a resultado public static double dobleNum(double numero) numero
8.5
numero
8.5
main método dobleNum
Ambas variables se llaman igual y ahora tienen el mismo valor pero son dos variables distintas y lo que le pase a una no afectará a la otra 229
Ámbito de las variables numero= 2*numero;
return numero; numero
8.5
numero
17.0
main
numero ahora cambia su valor pero la variable numero del main no cambió su valor
resultado= dobleNum(numero); resultado numero Finalmente a resultado
17.0 main 8.5
17.0
se le asigna lo que retorna el método. En este caso lo que retorna el método es el valor de numero 230
Ámbito de las variables System.out.println(numero); main
8.5
Aquí se imprime 8.5 pues estamos haciendo referencia a la variable que el que es reconocida en el método main.
231
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 class Loteria el ejemplo de la guía que vimos hoy { tenemos public static void main(String[]args) { } public static double combinaciones(int n, int k) { } public static double factorial (int numero) { } } 232
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?
233
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; } 234
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]; ¿Qué imprime este A[j]=temp; } }
método?
235
Métodos y Arreglos double[] a= {1.0, 2.4, 5.6, 4.5, 6.7};
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.
236
Métodos y Arreglos swap(a,0,3);
public static void swap(double[] A, int i, int j) a
A
1.0
2.4
i 0
5.6
4.5
6.7
j 3
237
Métodos y Arreglos double temp;
temp= A[0]; A[0]= A[3]; A[3]=temp; a
4.5
2.4
5.6
1.0
6.7
A
238
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
239
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
240
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]
241
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. Aquí está la a matriz
a[0]
0
0
0
0
a[1]
0
0
0
0
a[2]
0
0
0
0
242
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 a[0] 0 0 0 0 int.
243
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
244
Matrices como arreglos int[][] A={{1,2,3}, {4,5,6}, {7,8,9}};
A
A[0]
1
2
3
A[1]
4
5
6
A[2]
7
8
9
Creamos una variable A que hace referencia a un arreglo de 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. 245
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 A. b
A[0]
1
2
3
A[1]
4
5
6
A[2]
7
8
9
246
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: 1 2 3
247
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
248
Matrices como arreglos int[][] A={{1,2,3,4}, {5,6,7,8}, {9,1,2,3}};
A
A[0]
1
2
3
4
A[1]
5
6
7
8
A[2]
9
1
2
3
249
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. A
Este es el largo al que hacemos referencia al decir A.length
A[0]
1
2
3
4
A[1]
5
6
7
8
A[2]
9
1
2
3
250
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. A
A[0]
1
2
3
4
A[1]
5
6
7
8
A[2]
9
1
2
3
251
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: 1234 5678 9123 252
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.
3. El número de filas es igual a: nombre_matriz.length. Por ejemplo: A.length
5. El número de columnas se obtiene especificando una fila. Por ejemplo: A[0].length
253
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.
254
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:
Este es nuestro objeto de tipo String
String s= "Botella"; int a= s.length(); char b= s.charAt(2); int c= s.indexOf(a);
Aquí ocupamos al String s para llamar a estos métodos de la clase String 255
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. 256
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. a s1 345 “345” 257
Strings: método valueOf class Ejemplo { public static void main(String[] args) { int a= 345; String s1= String.valueOf(a); System.out.println(s1); Fíjense que para el double b= 3.456; String s2= String.valueOf(b); System.out.println(s2);
método valueOf() debemos especificar la clase
258
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: 345 3.456 a true abcd
} }
259