Anda di halaman 1dari 95

Secuencias de Control

Objetivos

Implementar control con repeticiones en un programa usando sentencias while Implementar control con repeticiones en un programa usando sentencias do-while Implementar control con repeticiones en un programa usando sentencias for Anidar la sentencia de control de repeticin de un bucle dentro de otra sentencia de repeticin Elegir la sentencia de control de repeticin adecuada para una tarea determinada Preguntar al usuario por una respuesta de tipo si-no usando el AnswerBox Formatear los datos de salida usando la clase Format del paquete javabook

Introduccin
Las sentencias de repeticin (sentencias de Control, bucles, ciclos) controlan un bloque de cdigo para que se ejecute un nmero fijo de veces o hasta que se cumple una determinada condicin. En java existen tres tipos de ciclos: while, do-while, for

La sentencia while
La sintaxis de la sentencia while es:
while (<expresin booleana>) <sentencias> int suma = 0, numero = 1;
Expresin booleana

while (numero <= 20) { suma = suma + numero;

Sentencia Cuerpo del bucle

numero = numero + 1; }

Diagrama de flujo
int suma = 0; numero = 1;

numero <= 20

verdadero

falso

suma = suma + numero; numero = numero + 1;

Valores de las variables en el ciclo


numero: numero: numero: numero: numero: numero: numero: numero: numero: numero: 1 suma= 1 2 suma= 3 3 suma= 6 4 suma= 10 5 suma= 15 6 suma= 21 7 suma= 28 8 suma= 36 9 suma= 45 10 suma= 55

numero: numero: numero: numero: numero: numero: numero: numero: numero: numero:

11 12 13 14 15 16 17 18 19 20

suma= suma= suma= suma= suma= suma= suma= suma= suma= suma=

66 78 91 105 120 136 153 171 190 210

Producto de impares
int producto = 1, numero = 1, contador = 20, ultimoNumero; ultimoNumero = 2 * contador -1; while (numero <= ultimoNumero) { producto = producto * numero; numero = numero + 2; }

Diagrama de flujo
int producto = 0; numero = 1; contado = 20; ultimoNumero = 2*contador -1

numero<= ultimoNumero

verdadero

falso

producto = producto * numero; numero = numero + 2;

Ciclos controlados por centinela


Lee la edad de una persona entre 0 y 130.
int edad; edad = entrada.getInteger("Su edad entre 0 y 130 : "); while (edad < 0 || edad > 130) { System.out.pritnln("Se ha introducido una edad invlida. +"intentelo de nuevo."); edad = entrada.getInteger("Su edad entre 0 y 130 : ");

Diagrama de flujo
edad

edad < 0 || edad > 130?

verdadero

Se ha introducido una edad invlida. intntelo de nuevo.

falso
edad

Ciclos controlados por centinela


Lee enteros y calcula la suma hasta que se teclea un nmero negativo
int suma = 0, numero; numero = entrada.getInteger("Teclee un entero : "); while (numero >= 0) { suma = suma + numero; System.out.println("suma = "+suma); numero = entrada.getInteger("Teclee un entero : "); }

Tarea
1. Escriba una sentencia while que sume los nmeros del 10 al 50.
2. Escriba un lazo while que sume los cuadrados de los nmero del 1 al 40.

3. Escriba una sentencia while para calcular el promedio de un conjunto de valores. La entrada de datos deber terminar con un valor negativo, es un bucle controlado por contador o por centinela? Debe tener un contador del nmero de valores que se introducen.

Ciclos infinitos
Cuando la condicin de un ciclo while es siempre verdadera, se tiene un ciclo infinito.
byte contador = 1;

while (contador != 10)


{ contador++;

contador++;
}

float contador = 0.0f;


while (contador != 1.0f) {

contador = contador + 0.3333333f;


} float contador = 0.0f; while (contador != 1.0f) {

contador = contador + 0.33333333f;


}

float contador = 0.0f;


while (contador <= 1.0f) {

contador = contador + 0.3333333f;


}

float contador = 0.0f;


while (contador <= 1.0f) {

contador = contador + 0.25f;


}

Error de fuera por uno OBOE


int contador = 1; while (contador < 10) { ... contador++; } int contador = 0; while (contador <= 10)

...
contador++;

OBOE corregido
int contador = 0; while (contador < 10) { ... contador++; } int contador = 1; while (contador <= 10)

...
contador++;

Comprobaciones en las sentencias de control de repeticin


1. Asegrese de que el cuerpo del bucle contiene una sentencia que har terminar al bucle en algn momento. 2. Asegrese de que el bucle se repite exactamente un nmero correcto de veces. 3. Se quiere ejecutar el cuerpo del bucle N veces, entonces inicie el contador a 0 y use la condicin de prueba contador < N o inicie el contador a 1 use la condicin de prueba contador <= N.

Preguntas rpidas
1. Cul de los siguientes es un bucle infinito?

a. int suma = 0, i = 0; while (i >= 0){ Suma += i; i++; }


b. int suma = 0, i = 100; while (i != 0){ Suma += i; i--; }

2. Para cada una de las siguientes sentencias, determine el valor de la suma despus de que se haya ejecutado el lazo. a. int contador = 0,suma = 0; while (contador < 10){ suma += contador; contador++; } b. int contador = 1,suma = 0; while (contador <= 30){ suma += contador; contador += 3; } c. int contador = 0,suma = 0; while (contador < 20){ suma += 3*contador; contador += 2; }

La sentencia do-while
La sintaxis de la sentencia do-while es: do <sentencias> while (<expresin booleana>); int suma = 0, numero = 1;
Expresin booleana

do { suma += numero;

Sentencia Cuerpo del bucle

numero++; } while (numero <= 20);

Diagrama de flujo
int suma = 0; numero = 1;

suma += numero; numero++;

numero <= 20
falso

verdadero

Lazo con centinela

int edad; do { edad = entrada.getInteger( "Su edad entre 0 y 130 : "); if(edad < 0 || edad> 130) System.out.prinln("Se ha introducido+ una edad invlida." + "intentelo de nuevo."); } while (edad < 0 || edad> 130);

Condicin compleja
El bucle termina cuando se reciba el valor centinela 0, cuando se introduzca un nmero par o cuando la suma sea mayor que 100. suma = 0; do { num = entrada.getInteger(teclee un entero:); if(num == 0)// centinela mensaje.show(suma = +suma); else if(num % 2 ==0)// nmero par mensaje.show(Error: nmero par); else{ suma += num; if(suma>100)//mayor que 100 mensaje.show(Suma > 100); } } while(!(num % 2 == 0 || num == 0 || suma > 100));

La condicin anterior se puede expresar como sigue haciendo uso de la equivalencia: !(a || b) <==> !a && !b
(num % 2 != 0 && num != 0 && suma <= 100);

boolean repetir = true; suma = 0; do { num = entrada.getInteger(teclee un entero:); if(num == 0){ // centinela mensaje.show(suma = +suma); repetir = false; } else if(num % 2 ==0){ // nmero par mensaje.show(Error: nmero par); repetir = false; } else{ suma += num; if(suma>100)//mayor que 100 mensaje.show(Suma > 100); repetir = false; } } while(repetir);

Preguntas rpidas
1. Escriba una sentencia do-while para calcular la suma de los primeros 30 enteros positivos e impares.

2. Reescriba los siguientes bucles while como bucles dowhile a. int contador = 0, suma = 0; while(contador < 10){ suma += contador; contador++; } b. int contador = 1, suma = 0; while(contador <= 30){ suma += contador; contador += 3; }

La sentencia for
La sintaxis de la sentencia for es:
for(<inicio>; <expresin booleana>; <incremento>) <sentencia>

Expresin booleana
inicio Incremento
for( i = 0 ; i < 20 ; i++ ){ numero = entrada.getInteger(); suma += numero;

Sentencia }

Diagrama de flujo
i = 0; <Inicio>

falso

i < 20

<Expresin booelana>

verdadero

<Sentencia>

numero = entradagetInteger(); suma += numero;

i++;

<incremento>

Clculo del factorial


El factorial de n se define como: n! = 1*2*3...*(n-1)*n
SimpleInput entrada = new SimpleInput();
int n, contador; float producto = 1; n = entrada.getInteger(" Teclee un entero "); for(contador = 1; contador <= n; contador++) { producto = producto * contador; System.out.println("numero: " + contador + " producto= " + producto); } System.out.println("El factorial es " + producto);

Cada libre
Se deja caer un objeto desde una altura H, la posicin P del objeto en el instante t esta dada por, P = 16t2 + H El instante en que toca el suelo se encuentra haciendo P = 0 en la ecuacin anterior y es igual a t = (H/16)

Programa
double alturaInicial, posicion,tiempoContacto; SimpleInput entrada = new SimpleInput(); alturaInicial = entrada.getDouble(" Altura inicial: "); tiempoContacto = Math.sqrt(alturaInicial/16.0); System.out.println( " Tiempo t posicion en el instante t "); for(int instante=0;instante<tiempoContacto;instante++){ posicion = -16.0*instante*instante+alturaInicial; System.out.pritnln(" " + instante+" " + posicion); } System.out.println(tiempoContacto + " 0.00");

Declaracin dentro del for


El elemento inicio del for se pueden declarar variables: for(int i = 0; i < 10; i++) En lugar de int i for(i = 0; i < 10; i++) Los incrementos pueden ser por cualquier valor. for(int i=0; i<100; i+=5) // i = 0, 5, 10, ... for(int j=2; j<40; j*=2) // j = 2, 4, 8, 16, 32 for(int k=100; k>0; k--) // k = 100, 99, 98, ...

Preguntas rpidas
1. Escriba un bucle for para calcular: a. La suma de 1, 2, ..., 100 b. La suma de 2, 4, ..., 500 c. El producto de 3, 5, 7, ..., 25 2. Reescriba los siguientes bucles while usando sentencias for, a. int contador = 0, suma = 0; while(contador < 10){ suma += contador; contador++; } b. int contador = 1, suma = 0; while(contador <= 30){ suma += contador; contador += 3; }

Preguntas rpidas
Escriba sentencias for, do-while y while para calcular las siguientes sumas y productos
a. 1 + 3 + 7 + ...+ (220 -1)

b. 1 + 1/2 + 1/3 + ... + 1/20


c. 1*2 + 2*3 + 3*4 + ... + 19*20 d. 1 x 2 x 4 x 8 x ... x 220

Lazos anidados
Es posible tener una lazo dentro de otro. A esto se le llama anidamiento.
int precio=100; salida.printLine(" 5 10 15 20 for(int ancho = 11; ancho <= 20; ancho++) { salida.print(ancho + " "); for(int longitud = 5; longitud <= 25; longitud+=5){ salida.print(" " + precio); } salida.skipLine(1); } 25");

Estructuras de Decisin
Sintaxis (prueba): switch (expr) { case expr1: decla1; break; case expr2: decla2; break; default: decla3; break; }

switch (estCivil) { case 1: conteoCasado++; break; case 2: conteoSoltero ++ break; default: // error; break; }

La Sentencia: Break

Es usa para salir del contexto actual (el cdigo que se ejecuta dentro de las llaves)

Como en una sentencia switch Como en un Bucle (while, for, etc)

En los Bucles For, el resto del cdigo es saltado.

Usualmente no es un buena idea viola la filosofa: entrada simple / salida simple single.

En las sentencias switch, el resto del cdigo es saltado y se sale del bucle switch.

La sentencia: Continue
Usada para salir de la iteracin actual de un ciclo y continue con la siguiente iteracin. Solamente se usa con los ciclos(for, while, etc) La parte de incremento del bucle for se ejecuta todava en la iteracin actual.

La sentencia: Return

Usado para salir del mtodo actual, regresa el valor por el cual el mtodo es llamado. Es Opcional si el tipo de mtodo es de tipo void

Sintaxis: return;

Se requiere si el mtodo tiene algn tipo de retorno diferente del void

Sintaxis: return <expresin>;


La expresin de ser primitiva o un objeto que es manejable y que se asigna al tipo de variable de regreso que devuelve el mtodo, lo cual es declarado en su encabezado.

Tabla de multiplicar
static public void main(String[] args){ MainWindow ventana = new MainWindow(); OutputBox salida = new OutputBox(ventana); ventana.show(); salida.setTitle("Tabla de multiplicar"); salida.show(); salida.printLine(" 1 2 3+ 5 6 7 8 9 10"); for(int i = 1; i <= 10; i++) { salida.print(i + " "); for(int j = 1; j <= 10; j++){ salida.print(" " + i*j); } salida.skipLine(1); } }

Preguntas rpidas
1. Cul ser la suma despus de ejecutar los siguientes for anidados?

a. Int suma = 0; for(int i=0; i<5; i++){ suma = suma + i; for(int j=0; i<5; j++){ suma = suma + j; }
b. Int suma = 0; for(int i=0; i<5; i++){ suma = suma + i; for(int j=i; i<5; j++){ suma = suma + j; }

El juego alto bajo


Escriba una aplicacin que permita jugar Alto-Bajo con el usuario.
Se generarn nmeros secretos aleatorios entre 1 y 100. Cuando el usuario propone un nmero, el programa responde Alto o Bajo dependiendo si es mayor o menor que el nmero secreto. El nmero mximo de intentos es 6.

inicio

Generar nmero secreto intentos = 0

algoritmo

intentos = intentos + 1

V
num

num != secreto && intentos != 6?

F
num>secreto?

F
V V
num == secreto? Alto Fallo

F
num<secreto?

V
Bajo

Acerto

fin

Tarea
1. Escriba un mtodo que devuelva true si el argumento es un nmero primo. 2. Utilizando el mtodo del problema 1 escriba un mtodo que liste todos los primos entre 1 y N , donde N es tecleado por el usuario. 3. Una terna de nmeros a, b, c es cuadrada perfecta si a2 + b2 = c2. Por ejemplo, 3, 4, 5 es una terna cuadrada perfecta. Escriba un programa para obtener todos las ternas cuadradas perfectas entre 1 y N, donde N es tecleado por el usuario. El programa no deber repetir ternas, es decir, la terna 3, 4, 5 es la misma que la terna 4, 3, 5, y deber imprimirse una sola vez.

Convenciones de Nombres

Mtodos & variables:

Mezcla de Maysculas y minsculas, siempre se comienza con letras minsculas para la primera palabra y las palabras subsiguientes comienzan con letras maysculas. Por Ejemplo: miPrimerMetodo(), miCuentaBancaria

Clases & interfases:

Mezcla de Maysculas y minsculas, siempre se comienza con una letra mayscula para la primer palabra y para las otras palabras siempre se empieza con maysculas. Por Ejemplo: MiClase, MiInterfase

Convenciones de Nombres

Constantes:
Cada palabra con letras maysculas separadas con un carcter de subrayado Por Ejemplo: MI_CONSTANTE_LARGA

Paquetes:
Todos se escriben con letras minsculas en toda la palabras Por Ejemplo: com.josefuentes.proyecto1

Solucin: Lab No. 2 (opcional)


import javax.swing.*; import java.awt.event.*; public class CajaDialogoEjemplo { public static void main(String[] args) { JFrame marco = new JFrame("Marco de la Caja de Dialogo"); JButton boton = new JButton("Muestra la Caja de Dialogo"); boton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ae) { String nombre = JOptionPane.showInputDialog(null, "Digite su Primer Nombre: ", "IES IM3-IS", 1); String apellido = JOptionPane.showInputDialog(null, "Digite su Apellido: ", "IES IM3-IS", 1); String nomCompleto = nombre + " " + apellido; if(nomCompleto != null) JOptionPane.showMessageDialog(null, "Usted ha digitado: " + nomCompleto, " IES IM3-IS ",1); else JOptionPane.showMessageDialog(null, "No digitado nada, vuelva a intentarlo!!", " IES IM3-Is ",1); } }); JPanel panel = new JPanel(); panel.add(boton); marco.add(panel); marco.setSize(400, 400); marco.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); marco.setVisible(true); } }

Pseudocdigo
Un algoritmo es una forma de escribir un cdigo de programacin ms adecuado a nuestro lenguaje. Y que tanto nosotros como otras personas puedan verlo. No necesariamente tiene que estar escrito en un lenguaje de programacin especfico. Mediante un algoritmo se pueden pasar a diferentes lenguajes de programacin fcilmente, teniendo la idea bsica en el algoritmo. Cdigo:

valor = 0 Mientras (valor sea menor a 20) { mostrar valor valor = valor + 1 Si (valor es igual a 10) { mostrar "me gusta el 10" } }

Pseudocdigo: Ejemplos
Ejemplo: Realizar el pseudocdigo de un programa que permita calcular el rea de un rectngulo. Se debe introducir la base y la altura para poder realizar el clculo..
Programa; rea Entorno: BASE, ALTURA, AREA son nmero enteros Algoritmo: escribir :Introduzca la base y la altura leer BASE, ALTURA calcular AREA = BASE * ALTURA escribir: El rea del rectngulo es AREA Fin programa Ejemplo: Realizar el pseudocdigo que permita al usuario introducir por teclado dos notas, calculando la suma y el producto de las notas. Programa: SumaProducto Entorno: NOTA1, NOTA2, SUMA, PRODUCTO son nmeros enteros Algoritmo: escribir: Introduzca las notas leer NOTA1,NOTA2 calcular SUMA = NOTA1 + NOTA2 calcular PRODUCTO = NOTA1 * NOTA2 escribir: La suma de las dos notas es: SUMA escribir: El producto de las dos notas es: PRODUCTO Fin programa

Pseudocdigo: Tarea.
Problema: Elabore el Pseudocdigo de un programa que calcule la suma de dos numero..

Programa Suma dos nmeros. Variables n1, n2, Suma enteros Inicio leer n1, leer n2, suma = n1 + n2; escribir suma Fin del programa.

Programacin Java Orientada a Objetos

Clases

Una clase es una plantilla (eso es una matriz) para la creacin de objetos. Una clase puede extenderse a otra clase (extends, eso quiere decir relacin de herencia)

e.g., public class nombreClase extends superNombreClase { ... }

Por De facto, todas las clases estn derivadas de una clase raz llamada Object. Todas las clases tienen una clase inmediata superior o superclase, con excepcin de la clase Object.

Clases
// Estudiante.java public class Estudiante{ private String nombre; // nombre es un campo, atributo o una variable de instancia public Estudiante(String n) { //este es un constructor. Note que tiene el mismo nombre = n; // nombre que la clase. Despus hablamos mas. } public void setNombre (String n) { Los mtodos getter y setter. Tpicamente, los nombre = n; Mtodos get y set se definen para cada atributo. } Si un campo se define, por decir dirTrab, public String getNombre () { Entonces un mtodo get se definir return nombre; getDirTrab() y el mtodo set setDirTrab(). } public void print () { System.out.println(El Nombre es: + nombre); } }

Clases
// TestEstudiante.java (esta es una clase para probar la funcionalidad de la clase Estudiante) public class TestEstudiante{ public static void main (String argv[]) { Estudiante s1 = new Estudiante("Lusa"); Estudiante s2 = new Estudiante("Juan"); s2.setNombre("Juan Jr."); s1.print(); System.out.println(s2.getNombre()); // tambin se puede usar print() } }

Note: las clases Estudiante y TestEstudiante necesitan estar en el mismo directorio para poder trabajar propiamente.

Objeto y clase

La clase implementa al tipo. Un objeto se define por medio de su clase de ah que un objeto sea una instancia individual de una clase. Al proceso de crear un objeto se le llama instanciacin. Una clase es la combinacin de estructuras, funciones e interfaces. La interfaz de una clase es todo lo visible para aquellas funciones que no forman parte de la clase. Las funciones cliente se comunican con la clase mediante la invocacin de su interfaz. Los objetos estn protegidos por una interfaz: el contrato entre el objeto y el cliente. Todos los objetos de un mismo tipo pueden recibir los mismos mensajes.

Objeto y clase
interfaz

Nombre de la Clase Atributos

objeto
mtodo cdigo datos mtodo cdigo

Mtodos

implementacin
57

Clases y objetos

58

Objetos

Las instancias de los Objetos de una clase se crean usando la palabra new

e.g. Estudiante s1 = new Estudiante(Juan);

Una variable no primitiva mantiene un manejador conocido como la referencia del objeto(object reference). De esta manera se asignan copias al manejador no el objeto.

Objetos (2)

Ejemplo: Estudiante s1 = new Estudiante(Luis); s1 Estudiante s2 = s1; s1


Luis Luis

s2
s2.setNombre(Luis JR.); // que nombre se ha cambiado?
Nota: Esto es por que se necesita usar.arraycopy para copiararrays

Objetos (3)

Ejemplo: Estudiante s1; // s1 tiene valor null s1 = new Estudiante(Juan); s1 s1 = new Estudiante(Maria); s1
Juan

Juan

Juan ser borrado (garbage collector)

Maria

s1 = null; // cual es el efecto de esto?

Atributos

Creacin de un atributo

opcional

Sintaxis:
tipoAcceso tipoDato nombreAtributo;

Ejemplo:
private int horasTrab; private String nombre;

Uso de las Variables

Sintaxis:
nombreAtributo (Si esta dentro de su clase) objectReference.nombreAtributo (si la clase es de afuera y el atributo esta accesible)

Ejemplo:
if (nombreAtributo < 40) // clase interna employee1.nombreAtributo = 37; // clase de afuera

Mtodo

Mtodo
define el comportamiento de una clase (llamado funciones miembros en C++) Pueden se implementada en las clases. Tiene que regresar algn tipo a menos que sean constructores (los que no tienen tipo de retorno) Los parmetros como argumentos se declaran dando el tipo y nombre y se separan con una coma entre ellos cuando hay mas de uno (Si no tiene parmetros, el listado esta vaco).

Definicin de un Mtodo
opcional

Sintaxis:
[TipodeAcceso] [modificadores(s)] tipoRetorno nombreMetodo (listado parmetros) { // cuerpo del mtodo }

Ejemplos:
public static void main(String[] args) { } private int miMetodo(int j, String s) { } String miMetodo2( ) { }

Constructores
Mtodo especial que lleva el mismo nombre que su clase. Son invocados al crearse un objeto (new) nuevo. Los Constructores no regresan nada Constructores ( y Mtodos en general) puede ser overloaded al cambiar el numero de sus parmetros.

Constructores (2)

Constructor por De Facto Default

Un constructor por De Facto (default) se provee automticamente para usted en cada clase
Formato: public MiClase() { // asumiendo que el nombre
de la clase es MiClase

Se permite que:
MiClase mc = new MiClase( );

Ser validado si usted agrega al constructor declaraciones con argumentos.

Especificadores de Acceso

Como en C++, los componentes de la clases se pueden asociar con sus especificadores de acceso

public. Accesible por todos protected Accesible solo por la misma clase, sus subclases, y el paquete. private Accesible solo por esta clase. friendly Accesible por el paquete; este es el acceso por de facto el acceso no especificado

Especificadores de Acceso

Criterios de Accesibilidad.
Modificadores Misma Clase Mismo Paquete Subclase public Si Si Si protected Si Si Si Default Si Si private Si Todo Si

Especificadores de Acceso

Examine las clases Empleados.java y PruebaAcceso.java en su disco. Compile la clase PruebaAcceso.java y observe el resultado. (Mirara un mensaje de error.) Ahora cambie los campos nombre y salario para variables publicas y re-compile y crralo PruebaAcceso.java . Observacin: Mantener las variables/campos private!

Argumentos, pasando parmetros


En un mtodo Java pasa los argumentos por sus valor solamente. Cuando la referencia de un objeto es pasado como argumento en un mtodo, una copia la referencia del objeto es pasada.

De esta forma el contenido actual del objeto puede cambiarse dentro del mtodo pero la referencia misma del objeto nunca cambia.

Argumentos, pasando parmetros

Ejemplo:
public static void main (String args[]) {
int a = 10; String s = hola; Empleado e = new Empleado(Maria); metodo1(a, s, e); System.out.println(a =+a+s=+s+e+e); // imprime 10, hola2 y Juan

} public static void metodo1 (int a2, String s2, Empleado e2) {
a2 = 100; s2 = hola2; e2.setNombre(Juan); e2 = new Empleado(Esther);

Creando Objetos
int num; //declara una variable int String nombre; //declara un objeto String
// ambos no estn inicializados

num = 42; //asigna un valor a num nombre = new String(Elvis Presley);


//crea un objeto String

Que pasa cuando creamos un Objeto?


String nombre = new String (Elvis Presley);
Constructor llamado para instanciar un objeto. Hemos creado una instancia de la clase String llamada nombre La variable del objeto de referencia nombre mantiene la direccin del objeto no el objeto

nombre Elvis Presley

Otra forma corta para Strings (solamente)


String nombre = new String (Elvis Presley);

lo mismo que String nombre = Elvis Presley;

Tenga cuidado de los Nombres (ID)


int num1 = 5; int num2 = 10; num1 = num2;

//Que sucede aqu?

String nombre1 = Aniceto Prieto; String nombre2 = Pacho Madrigal; nombre1 = nombre2; //Cual es la diferencia?

Nombres (ID)
5 num1 = num2; num2 10 num2 10 10

num1

num1

nombre1

Aniceto Prieto

nombre2

Pacho Madrigal nombre1 = nombre2

La Clase String

Los objetos String son inmutable no se pueden cambiar


Caracteres en una String se ubican por un index Index comienza de 0

Jumping Java Beans


0 1 2 3 4 5 6 7 8 10 12 14 16

Mtodos de la Clase String

Use el operador punto para llamar un mtodo

String nombre = Donald Duck; conteo = nombre.length(); Cual ser el valor de conteo?

Otros mtodos de la Clase String

char charAt (int index)

Regresa el ndex del carcter (smbolo).

boolean equals (String cad)

Regresa true si la cadena es exactamente que cadena.

String remplazar (char carVieja, char carNueva)

Regresa una cadena que ha reemplazado carVieja con carNueva

String toLowerCase(), String toUpperCase()

Regresa una cadena con todas minsculas, maysculas.

String substring (int primLetra , int ultIndex-1)

Regresa una nueva cadena que comienza con primLetra y continua hasta la letra con ultIndex-1)

Cadenas (Strings)

Ejemplos
String apellido = Schaefer; apellido.length() // regresa 8 apellido.toUpper() // regresa SCHAEFER apellido.toLower() // regresa schaefer apellido.indexOf(e) // regresa 4 apellido.indexOf(x) // regresa 1 (por no encontrarse) apellido.indexOf(e,5) // regresa 6 apellido.substring(2,5) // da hae (1er index es inclusive,
2o index es excluido)

Pruebe esto Cual es el resultado?


String m1, m2, m3; m1 = Bsqueda del Santo Grial; m2 = m1.toLowerCase(); m3 = m1 + + m2; System.out.println(m3.replace(h, z));

Las Clases de la Librera.

Una clase de la librera

Coleccin de clases que se pueden usar cuando se desarrollan los programas.

Java Librera de Clase Estndar (Java standard class library)

Parte de cualquier entorno de desarrollo

Varias clases que ya usamos (System , Scanner, String) son parte de la Librera de Clases de Java. Otras clases de la librera se obtienen de terceras personas, o Usted mismo las crea.

Paquetes

Las clases de la librera de clases en Java se organizan en paquetes. Algunos de los paquetes de la librera estndar de Java son:
Propsito Soporte General Formateo del texto de salida Interfaces Graficas e interfaces graficas del Usuario Capacidades graficas adicionales Comunicacin de Redes Utilidades Realiza calculaciones

Paquete java.lang java.text java.awt javax.swing java.net java.util java.math

La declaracin import

Cuando se va a utilizar una clase de un paquete, Usted debe usar el nombre de la clase de forma entera:
java.util.Scanner

O Usted puede hacer un import de la clase y despus hacer uso del nombre de la clase
import java.util.Scanner;

Para hacer import de todas las clases en particular de un paquete, usamos * como carcter comodn: import java.util.*;

La declaracin import

Todas las clases del paquete java.lang son importadas automaticamente para el programa Si el programa contiene la siguiente linea: import java.lang.*;

Esa es la razon porque no hicimos un import de la clase System o clase String de forma explicita en programas anteriores.

La Clase Random

La clase Random es parte del paquete java.util


Provee mtodos que generan nmeros aleatorios (pseudorandom)

Un objeto Random realiza una calculacin compleja basada en una semilla que produce un flujo de valores aleatorios.

import java.util.Random; public class RandomSimple { public static void main(String[] args) { int num1; float num2; Random generador = new Random(); //genera un numero entre 1 y 5000 num1 = generador.nextInt(5000)+ 1; System.out.println(El entero es " + num1);

//genera un numero entre 1000 y 9999 num2 = generador.nextFloat(); System.out.println(El numero decimal es: " + num2); } }

La Clase Math

La clase Math es parte del paquete java.lang La clase Math contiene mtodos que realizan varias funciones matemticas Entre ellas estn:

Valor absoluto Raz cuadrada

Potencia o elevar a un exponente


Funciones trigonomtricas.

La Clase Math

Los mtodos de la clase Math son mtodos estticos static (tambin llamados mtodos de clase) Un mtodo Static solo puede ser invocado a travs del nombre de la clase no por el objeto de la clase Math.

valor = Math.cos(90)+ Math.sqrt(delta); valor = Math.pow(cantidad, 3);

Formateando los Resultados

Muy frecuentemente es necesario darle formato a los resulados para que ellos sean entendidos de manera mas apropiada. La libreria estandar de clases contiene clase que proveen las capacidades para formatear los datos La clase NumberFormat le permite que Usted formatee valores de dinero y porcentajes.

La clase DecimalFormat le permite que Usted formatee los valores bajo un formato establecido
Ambos son parte del paquete java.text

Formateando los Resultados

La clase NumberFormat tiene metodos estaticos que regresan un objeto formateador


getCurrencyInstance()

getPercentInstance()

Objeto formateador tien un metodo llamado format que regresa una cadena con la informacion especificada en el formato apropiado.

import java.text.NumberFormat; public class FormatoNums { public static void main(String[] args) { int num1 = 12345; double num2 = 98765.54391; float num3 = .067f; NumberFormat fmtNum = NumberFormat.getNumberInstance();

System.out.println(fmtNum.format(num1)); System.out.println(fmtNum.format(num2)); //redondea una fraccion a 3 digitos.


fmtNum.setMaximumFractionDigits(6); fmtNum.setMinimumFractionDigits(6); System.out.println(fmtNum.format(num2)); // establece el max y min # digitos decimales.

NumberFormat fmtCurr = NumberFormat.getCurrencyInstance(); System.out.println(fmtCurr.format(num1)); System.out.println(fmtCurr.format(num2)); NumberFormat fmtPercent = NumberFormat.getPercentInstance(); System.out.println(fmtPercent.format(num1)); System.out.println(fmtPercent.format(num3));
} }

Formateando los Resultados

La clase DecimalFormat puede ser usada para formatear un valor decimal de maneras diferentes. Por ejemplo, Usted puede especificar que el numero ser truncado a tres decimales. El constructor de la clase DecimalFormat toma una cadena que representa el formato bajo el cual se adaptara el numero.

DecimalFormat patternName = new DecimalFormat(formato); DecimalFormat dosDigitos = new DecimalFormat (000.00);

Si tenemos 123456.789
###,###.### ###.## Si tenemos 123.4 00000.00 123,456.789 123456.79

00123.40

Use el mtodo format() para designar los formatos


dosDigitos.format(total);

import java.util.Scanner; import java.text.DecimalFormat; public class Average { public static void main(String[] args) { int num1, num2, num3; double average; Scanner scan = new Scanner (System.in); System.out.print(Digite tres enteros:"); //captura 3 enteros del usuario num1 = scan.nextInt(); num2 = scan.nextInt(); num3 = scan.nextInt(); average = (num1 + num2 + num3)/3.0; //calcula el average System.out.println(El average es " + average); DecimalFormat fmtDosDigitosPlaces = new DecimalFormat("###.##"); System.out.println(" El average ya formateado es " + fmtDosDigitos.format(average)); DecimalFormat fmtCuatro = new DecimalFormat("0000.0000"); System.out.println(El average ya formateado es " + fmtCuatro.format(average)); } }

Anda mungkin juga menyukai