Clases Completas 1era Parte (vanny Smith)

  • Uploaded by: api-3861109
  • 0
  • 0
  • November 2019
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Clases Completas 1era Parte (vanny Smith) as PDF for free.

More details

  • Words: 13,182
  • Pages: 259
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

Related Documents