Fundamentos De Java En Gnu Linux

  • Author / Uploaded
  • Anon

Citation preview

FU F UN ND DA AM M EE N N TT O O SS dd ee

JA J AV VA A e nn e

GN G NU U // LL II N NU UX X GUIA DE ESTUDIO

1

FUNDAMENTOS DE JAVA EN GNU/LINUX GUIA DE AUTO ESTUDIO

I NTRODUCCIÓN CARACTERÍSTICAS DE JAVA

A S

continuación haremos una pequeña redacción de las características del lenguaje, que nos ayudarán a ver para que tipo de problemas está pensado Java:

imple Es un lenguaje sencillo de aprender. Su sintaxis es la de C++ “simplificada”. Los creadores de Java partieron de la sintaxis de C++ y trataron de eliminar de este todo lo que resultase complicado o fuente de errores en este lenguaje.

O D

rientado a Objetos Posiblemente sea el lenguaje más orientado a objetos de todos los existentes; en Java todo, a excepción de los tipos fundamentales de variables (int, char, long...) es un objeto.

istribuido Java está muy orientado al trabajo en red, soportando protocolos como TCP/IP, UDP, HTTP y FTP. Por otro lado el uso de estos protocolos es bastante sencillo comparandolo con otros lenguajes que los soportan.

R

código.

S

obusto El compilador Java detecta muchos errores que otros compiladores solo detectarían en tiempo de ejecución o incluso nunca. (ej: if(a=b) then ... el compilador Java no nos dejaría compilar este

eguro Sobre todo un tipo de desarrollo: los Applet. Estos son programas diseñados para ser ejecutados en una página web. Java garantiza que ningún Applet puede escribir o leer de nuestro disco o mandar información del usuario que accede a la página a través de la red (como, por ejemplo, la dirección de correo electrónico). En general no permite realizar cualquier acción que pudiera dañar la máquina o violar la intimidad del que visita la página web.

P

ortable En Java no hay aspectos dependientes de la implementación, todas las implementaciones de Java siguen los mismos estándares en cuanto a tamaño y almacenamiento de los datos. Esto no ocurre así en C++, por ejemplo. En éste un entero, por ejemplo, puede tener un tamaño de 16, 32 o más bits, siendo lo única limitación que el entero sea mayor que un short y menor que un long int. Así mismo C++ bajo UNIX almacena los datos en formato little endian, mientas que bajo Windows lo hace en big endian. Java lo hace siempre en little edian para evitar confusiones. 2

A

rquitectura Neutral El código generado por el compilador Java es independiente de la arquitectura: podría ejecutarse en un entorno UNIX, Mac o Windows. El motivo de esto es que el que realmente ejecuta el código generado por el compilador no es el procesador del ordenador directamente, sino que este se ejecuta mediante una máquina virtual. Esto permite que los Applets de una web pueda ejecutarlos cualquier máquina que se conecte a ella independientemente de que sistema operativo emplee (siempre y cuando el ordenador en cuestión tenga instalada una máquina virtual de Java).

R

endimiento medio Actualmente la velocidad de procesado del código Java es semejante a la de C++, hay ciertos pruebas estándares de comparación (benchmarks) en las que Java gana a C++ y viceversa. Esto es así gracias al uso de compiladores just in time, compiladores que traduce los bytecodes de Java en código para una determinada CPU, que no precisa de la máquina virtual para ser ejecutado, y guardan el resultado de dicha conversión, volviéndolo a llamar en caso de volverlo a necesitar, con lo que se evita la sobrecarga de trabajo asociada a la interpretación del bytecode. No obstante por norma general el programa Java consume bastante más memoria que el programa C++, ya que no sólo ha de cargar en memoria los recursos necesario para la ejecución del programa, sino que además debe simular un sistema operativo y hardware virtuales (la máquina virtual). Por otro lado la programación gráfica empleando las librerías Swing es más lenta que el uso de componentes nativos en las interfaces de usuario. En general en Java se ha sacrificado el rendimiento para facilitar la programación y sobre todo para conseguir la característica de neutralidad arquitectural, si bien es cierto que los avances en las máquinas virtuales remedian cada vez más estas decisiones de diseño.

M

ultithread Soporta de modo nativo los threads, sin necesidad del uso de de librerías específicas (como es el caso de C++). Esto le permite además que cada Thread de una aplicación java pueda correr en una CPU distinta, si la aplicación se ejecuta en una máquina que posee varias CPU. Las aplicaciones de C++ no son capaces de distribuir, de modo transparente para el programador, la carga entre varias CPU.

3

4

CAPITULO 1

FUNDAMENTOS JAVA SOBRE GNU/LINUX

INTRODUCCION OBJETIVOS Al completar éste Capitulo, usted podrá: • Instalar y configurar java sobre GNU/Linux • Escribir Simple programas de Java • Compilar y ejecutar programas de Java

PREGUNTAS PRE-EXAMEN

Las repuestas se encuentran en el Apéndice A al final del Libro.

1. ¿Qué es Java?

2. ¿Quien Goslin?

3. ¿Cómo es JAVA Distribuido? 4. ¿Cómo es JAVA Licenciado?

5. ¿Es JAVA Software Open Source? 6. ¿Es JAVA Software Open Source? 7. ¿Que es el ByteCode?

8. ¿Que es un desarrollador? 9. ¿Que es el JVM?

5

HIST ORIA

A. ¿Por qué se diseñó Java?

L

os lenguajes de programación C y Fortran se han utilizado para diseñar algunos de los sistemas más complejos en lenguajes de programación estructurada, creciendo hasta formar complicados procedimientos. De ahí provienen términos como "código de espagueti" o "canguros" referentes a programas con múltiples saltos y un control de flujo difícilmente trazable.

N

o sólo se necesitaba un lenguaje de programación para tratar esta complejidad, sino un nuevo estilo de programación. Este cambio de paradigma de la programación estructurada a la programación orientada a objetos, comenzó hace 30 años con un lenguaje llamado Simula67.

E

l lenguaje C++ fue un intento de tomar estos principios y emplearlos dentro de las restricciones de C. Todos los compiladores de C++ eran capaces de compilar programas de C sin clases, es decir, un lenguaje capaz de interpretar dos estilos diferentes de programación. Esta compatibilidad ("hacia atrás") que habitualmente se vende como una característica de C++ es precisamente su punto más débil. No es necesario utilizar un diseño orientado a objetos para programar en C++, razón por la que muchas veces las aplicaciones en este lenguaje no son realmente orientadas al objeto, perdiendo así los beneficios que este paradigma aporta.

A

sí Java utiliza convenciones casi idénticas para declaración de variables, paso de parámetros, y demás, pero sólo considera las partes de C++ que no estaban ya en C.

Las principales características que Java no hereda de C++ son: • Punteros: Las direcciones de memoria son la característica más poderosa de C++. El inadecuado uso de los punteros provoca la mayoría de los errores de colisión de memoria, errores muy difíciles de detectar. Además, casi todos los virus que se han escrito aprovechan la capacidad de un programa para acceder a la memoria volátil (RAM) utilizando punteros. En Java, no existen punteros, evitando el acceso directo a la memoria volátil. • Variables globales: Con ellas cualquier función puede producir efectos laterales, e incluso se pueden producir fallos catastróficos cuando algún otro método cambia el estado de la variable global necesaria para la realización de otros procesos. En Java lo único global es el nombre de las clases. • goto: Manera rápida de arreglar un programa sin estructurar el código. Java no tiene ninguna sentencia goto. Sin embargo Java tiene las sentencias break y continue que cubren los casos importantes de goto. • Asignación de memoria: La función malloc de C, asigna un número especificado de bytes de memoria devolviendo la dirección de ese bloque. La función free devuelve un bloque asignado al sistema para que lo utilice. Si se olvida de llamar a free para liberar un bloque de memoria, se están limitando los recursos del sistema, ralentizando progresivamente los programas. Si por el contrario se hace un free sobre un puntero ya liberado, puede ocurrir cualquier cosa. Más tarde C++ añadió new y delete, que se usan de forma similar, siendo todavía el programador, el responsable de liberar el espacio de memoria. Java no tiene funciones malloc ni free. Se utiliza el operador new para asignar un espacio de memoria a un objeto en el montículo de memoria. Con new no se obtiene una dirección de memoria sino un descriptor al objeto del montículo. La memoria real asignada a ese objeto se puede mover a la vez que el programa se 6

ejecuta, pero sin tener que preocuparse de ello. Cuando no tenga ninguna referencia de ningún objeto, la memoria ocupada estará disponible para que la reutilice el resto del sistema sin tener que llamar a free o delete. A esto se le llama recogida de basura. El recolector de basura se ejecuta siempre que el sistema esté libre, o cuando una asignación solicitada no encuentre asignación suficiente. • Conversión de tipos insegura: Los moldeados de tipo (type casting) son un mecanismo poderoso de C y C++ que permite cambiar el tipo de un puntero. Esto requiere extremada precaución puesto que no hay nada previsto para detectar si la conversión es correcta en tiempo de ejecución. En Java se puede hacer una comprobación en tiempo de ejecución de la compatibilidad de tipos y emitir una excepción cuando falla.

B. Comienzos

Java fue diseñado en 1990 por James Gosling, de Sun Microsystems, como software para dispositivos electrónicos de consumo. Curiosamente, todo este lenguaje fue diseñado antes de que diese comienzo la era World Wide Web, puesto que fue diseñado para dispositivos electrónicos como calculadoras, microondas y la televisión interactiva.

Imagen 2: Logotipo de la empresa Sun Microsystems

E

n los primeros años de la década de los noventa, Sun Microsystems decidió intentar introducirse en el mercado de la electrónica de consumo y desarrollar programas para pequeños dispositivos electrónicos. Tras unos comienzos dudosos, Sun decidió crear una filial, denominada FirstPerson Inc., para dar margen de maniobra al equipo responsable del proyecto.

I

nicialmente Java se llamó Oak (roble en inglés), aunque tuvo que cambiar de denominación, debido a que dicho nombre ya estaba registrado por otra empresa. Se dice este nombre se le puso debido a la existencia de tal árbol en los alrededores del lugar de trabajo de los promotores del lenguaje. Tres de las principales razones que llevaron a crear Java son:

1 Creciente necesidad de interfaces mucho más cómodas e intuitivas que los sistemas de ventanas que proliferaban hasta el momento. 2 Fiabilidad del código y facilidad de desarrollo. Gosling observó que muchas de las características que ofrecían C o C++ aumentaban de forma alarmante el gran coste de pruebas y depuración. Por ello en los sus ratos libres creó un lenguaje de programación donde intentaba solucionar los fallos que encontraba en C++. 3 Enorme diversidad de controladores electrónicos. Los dispositivos electrónicos se controlan mediante la utilización de microprocesadores de bajo precio y reducidas prestaciones, que varían cada poco tiempo y que utilizan diversos conjuntos de instrucciones. Java permite escribir un código común para todos los dispositivos.

P

or todo ello, en lugar de tratar únicamente de optimizar las técnicas de desarrollo y dar por sentada la utilización de C o C++, el equipo de Gosling se planteó que tal vez los lenguajes existentes eran demasiado complicados como para conseguir reducir de forma apreciable la complejidad de desarrollo asociada a ese campo. Por este motivo, su primera propuesta fue idear un nuevo lenguaje de programación lo más sen7

cillo posible, con el objeto de que se pudiese adaptar con facilidad a cualquier entorno de ejecución.

B

asándose en el conocimiento y estudio de gran cantidad de lenguajes, este grupo decidió recoger las características esenciales que debía tener un lenguaje de programación moderno y potente, pero eliminando todas aquellas funciones que no eran absolutamente imprescindibles. Para más información véase [Cuenca, 1997].

C. Primeros proyectos en que se aplicó Java

E

l proyecto Green fue el primero en el que se aplicó Java, y consistía en un sistema de control completo de los aparatos electrónicos y el entorno de un hogar. Con este fin se construyó un ordenador experimental denominado *7 (Star Seven). El sistema presentaba una interfaz basada en la representación de la casa de forma animada y el control se llevaba a cabo mediante una pantalla sensible al tacto. En el sistema aparecía ya Duke, la actual mascota de Java.

Imagen 3: Icono de Duke, la mascota de Java

M

ás tarde Java se aplicó a otro proyecto denominado VOD (Video On Demand) en el que se empleaba como interfaz para la televisión interactiva que se pensaba iba a ser el principal campo de aplicación de Java. Ninguno de estos proyectos se convirtió nunca en un sistema comercial, pero fueron desarrollados enteramente en un Java primitivo.

U

na vez que en Sun se dieron cuenta de que a corto plazo la televisión interactiva no iba a ser un gran éxito, instaron a FirstPerson a desarrollar nuevas estrategias que produjeran beneficios. Entre ellas se encontraba la aplicación de Java a Internet, la cual no se consideró productiva en ese momento. Para más información véase [Froufe, 1997].

D. Resurgimiento de Java

A

unque muchas de las fuentes consultadas señalan que Java no llegó a caer en un olvido, lo cierto es que tuvo que ser Bill Joy (cofundador de Sun y uno de los desarrolladores principales del sistema operativo Unix de Berckley) el que sacó a Java del letargo en que estaba sumido. Joy juzgó que Internet podría llegar a ser el campo adecuado para disputar a Microsoft su primacía en el terreno del software, y vio en Oak el instrumento idóneo para llevar a cabo estos planes.

P

ara poder presentarlo en sociedad se tuvo que modificar el nombre de este lenguaje de programación y se tuvo que realizar una serie de modificaciones de diseño para poderlo adaptar al propósito mencionado. Así Java fue presentado en sociedad en agosto de 1995. Algunas de las razones que llevaron a Bill Joy a pensar que Java podría llegar a ser rentable son: • Java es un lenguaje orientado a objetos: Esto es lo que facilita abordar la resolución de cualquier tipo de problema.

8

• Es un lenguaje sencillo, aunque sin duda potente. • La ejecución del código Java es segura y fiable: Los programas no acceden directamente a la memoria del ordenador, siendo imposible que un programa escrito en Java pueda acceder a los recursos del ordenador sin que esta operación le sea permitida de forma explícita. De este modo, los datos del usuario quedan a salvo de la existencia de virus escritos en Java. La ejecución segura y controlada del código Java es una característica única, que no puede encontrarse en ninguna otra tecnología. • Es totalmente multiplataforma: Es un lenguaje sencillo, por lo que el entorno necesario para su ejecución es de pequeño tamaño y puede adaptarse incluso al interior de un navegador.

L

as consecuencias de la utilización de Java junto a la expansión universal de Internet todavía están comenzando a vislumbrarse.

Para más información véase [Froufe, 1997].

E. Futuro de Java

E

xisten muchas críticas a Java debido a su lenta velocidad de ejecución, aproximadamente unas 20 veces más lento que un programa en lenguaje C. Sun está trabajando intensamente en crear versiones de Java con una velocidad mayor.

E

l problema fundamental de Java es que utiliza una representación intermedia denominada código de byte para solventar los problemas de portabilidad. Los códigos de byte posteriormente se tendrán que transformar en código máquina en cada máquina en que son utilizados, lo que ralentiza considerablemente el proceso de ejecución.

L

a solución que se deriva de esto parece bastante obvia: fabricar ordenadores capaces de comprender directamente los códigos de byte. Éstas serían unas máquinas que utilizaran Java como sistema operativo y que no requerirían en principio de disco duro porque obtendrían sus recursos de la red.

A

los ordenadores que utilizan Java como sistema operativo se les llama Network Computer, WebPC o WebTop. La primera gran empresa que ha apostado por este tipo de máquinas ha sido Oracle, que en enero de 1996 presentó en Japón su primer NC (Network Computer), basado en un procesador RISC con 8 Megabytes de RAM. Tras Oracle, han sido compañías del tamaño de Sun, Apple e IBM las que han anunciado desarrollos similares.

L

a principal empresa en el mundo del software, Microsoft, que en los comienzos de Java no estaba a favor de su utilización, ha licenciado Java, lo ha incluido en Internet Explorer (versión 3.0 y posteriores), y ha lanzado un entorno de desarrollo para Java, que se denomina Visual J++.

E

l único problema aparente es la seguridad para que Java se pueda utilizar para transacciones críticas. Sun va a apostar por firmas digitales, que serán clave en el desarrollo no sólo de Java, sino de Internet.

Para más información véase [Framiñán, 1997].

9

F. Especulación sobre el futuro de Java

E

n opinión de los redactores de este tutorial, Java es una plataforma que le falta madurar, pero que a buen seguro lo va a hacer. La apuesta realizada por empresas con mucho peso específico ha sido tan grande que va a dar un impulso a Java que no le permitirá caer

A P

demás, el parque de productos (entornos de desarrollo, bibliotecas, elementos de conectividad...) ya disponible en la actualidad es tan amplio que es improbable que se quede en nada.

or otra parte, la relación simbiótica que tiene con Internet (y por derivación con las Intranets) es un punto a favor de Java de muy difícil refutación.

G

DESCARGAR EL JAVA DEVELOPMENT KIT (JDK)

NU/Linux esta estructurado con un kernel pequeño y un número de programas utilitarios montados encima del kernel. El núcleo maneja los recursos de la computadora, tal como el procesador y la memoria, y en esto debe asegurarse de que cada quien que trata de utilizar éstos recursos es dado una oportunidad apropiada de tiempo de acceso.

El kernel se carga en memoria cuando Linux se inicia y permanece en memoria hasta que el sistema se descarga por completo. Se diseña para ser lo más pequeño que sea posible, permitiendo así que la memoria restante sea compartida entre todos los programas que se ejecutan en el sistema. Los programas utilitarios proporcionan manejo de archivo, supervisión del sistema, desarrollo de aplicaciones, manejo de usuario, y comunicación de red. Puede haber más de 2.000 utilidades en un sistema de GNU/Linux.

G

INSTALAR EL JDK

NU/Linux se utiliza en una amplia gama de instituciones y de organizaciones. Cada día más y más paises y compañías se alínean al uso y filosofía del SoftWare Libre.

• Los Proveedores de Internet (ISPs) lo utilizan para los servidores de red, tales como servidores WEB. • Las universidades y los centros de investigación lo utilizan para las matemáticas que procesan, desarrollo de aplicaciones, y Correo Electrónico. • Las grandes organizaciones comerciales, como los bancos, lo utilizan para sus servidores de base de datos. • Las industrias de servicio, tales como hoteles y líneas aéreas, lo utilizan para las reservaciones. • Muchas industrias lo emplean para usarla en estaciones de trabajos gráficas. • GNU/Linux se utiliza en sistemas médicos, scanners y sistemas de imagen. • También se utiliza en la fabricación, la tecnología, CAD/CAM, investigación y desarrollo aplicaciones. • Puede ser utilizado en sistemas de energía y grande simulaciones de sistemas. • Puede ser utilizado en el gobierno y las ramas militares, simuladoras de aviones y aeroespacio, y predicción del tiempo.

P

DIGITAR Y EJECUTAR SU PRIMER PROGRAMA EN GNU/LINUX

ara crear un programa de java es necesario disponer de un editor en las mayoria de los casos vi sera suficiente. Otros prefieren emacs y si estas en el X puedes usar gedit en GNOME o kedit en KDE. Aqui asuminos que es vi. public class HolaMundo {public static void main(String[] args) // Comentario { System.out.println(“Hola, como estas?”);

10

}

}

L

ANALIZAR EL HOLAMUNDO

a primera linea declara el nombre de la clase el cual debe ser el mismo nombre del archivo que salvamos en nuestro ordenador seguido por la extension .java asi que este archivo en este caso se debe llamar HolaMundo.java y no puede ser otro o javac (el compilador devolvera un error).

L

a segunda linea empieza por una llave { que va inmediatamente despues de la declaracion de la clase tambien se puede poner al final de la declaracion de la clase, sera cerrado al final de la case. Estas dos llaves forman un bloque la primera y la ultima. Luego sigue cuatro palabras claves de java que son public - static - void - main. La primera public es que este bloque puede ser accesado desde todas las otras clases. la palabra static significa que el metodo definido aqui aplica para la clase misma y no los objetos de la clase. La palabra void significa que este metodo no retorna valor alguno. Luego sigue las // lineas que significa que lo que sigue es solo un comentario y que el compilador no lo tomara en cuenta. Ejemplo 1.1 // Programar Java sobre LINUX es productivo public class HolaMundo {public static void main(String[] args) // Comentario { System.out.println(“Hola, como estas?”); } }

P

ara compilarlo debe primero salvarlo con el nombre HolaMundo.java, y luego compilarlo dependiendo donde esta su compilador de javac asi:/ruta/javac Holamundo.java, esto producira un archivo del mismo nombre pero con la extension .class, HolaMundo.class para poder ejecutar este archivo .class debera digitar en la linea de comandos: /ruta/java HolaMundo, note que es java y no javac y que no escribio la extendion .class aunque el nombre si la tiene.

L

Ejemplo 1.2 Entradas Interactivas a mayoria de los programas requieren cierto tipo de entrada desde el usuario, java tiene muchas librerias y ,metodos que pueden manejar la entrada de texto interactivo.

// Este programa le pide ingresar varios datos para concluir import java.io.*; public class HolaTux { public static void main(String[] args) throws IOexception { inputStreamReader reader = new InputStreamReader(System.in); BufferedReader input = new BufferedReader(reader); System.out.println("Introduzca su nombre: "); String nombre = input.readline(); }

}

System.out.println("Hola, como estas

" + nombre);

11

Aqui en este ejemplo ahi cinco objetos System.in, reader, input, name y System.out. El System.in y out estan definidos en la clase System, los otros son definidos en el programa por el programador. La primera linea del archivo le dice al compilador que busque en esta librerias por las tres clases Entrada/Salida I/O que son usadas en el programa: IOException, InputStreamReader y BufferedReader. La tercera linea es la función main que todo programa debe tener puesto que aqui es que empieza la acción. Aquí tambien se hace un llamado a la función IOException, la cual permite el uso del metodo readLine(). La cuarta linea define el objeto reader a ser una instancia de la clase InputStreamReader, amarrandola a la entrada del sistema System.in. Lo cual significa que el objeto reader servira como una tuberia filtrando la data desde el teclado hacia el programa. La quinta linea define el objeto input a ser una instancia de la clase BufferedReader, amarrandolo al objeto reader. Lo que significa que el objeto input puede ser usado para extraer la entrada en una manera conveniente. En particular puede usar su metodo readLine() para leer una linea de caracteres por completo desde el teclado y transmitirla en forma de un objeto String. Esto se lleva acabo en la linea siete asi: String name = input.readLine(); Se declara el objeto tipo String de nombre name y se inicializa con el valor de la cadena que es devuelta por el metodo input.readLine(). El resultado es que el objeto name contiene lo que el usuario escribio en el teclado. Digamos que escriba “Linus Torvalds”, le responderia: Hola, Linus Torvalds! Fijese que los metodos readLine() es analogo al println(). La sentencia: name = input.readLine(); Copia una linea de caracteres desde el teclado a la cadena name, y la sentencia: System.out.println(name); Copia una linea de caracteres desde la cadena name hacia la pantalla. Recuerde siempre que java es caso sensitivo y que diferencia entre mayuzculas y minuzculas.

E

Ejemplo 1.3 Entradas Interactivas Numericas n este ejemplo se ingresa su edad y el programa calcula su año de nacimiento basadao en el año 2005. Aqui se ilustra la captura de entrada de numeros enteros y su manipulación. Como el programa anterior tambien se usa la sentencia import para el uso de libreias de I/O y sus clases que ya definimos InputStreamReader y BufferedReader. Ademas se incluye la clausura throws IOException en el metodo main(). Luego de leer la data como una cadena o String se convierte el texto a entereos con la expresion: new Integer(text).inValue()

import java.io.*; public class edad { public static void main (String[] args) throws IOException { InputStreamReader reader = new InputStreamReader(System.in); BufferedReader input = new BufferedReader(reader); 12

}

System.out.print("digite su edad:"); String text = input.readLine(); int age = new Integer(text).intValue(); System.out.println("su edad es " + age + " anos "); int year = 2005 - age; System.out.println("probablemente usted nacio en el año " + year); }

E

Ejemplo 1.4 Calcular el Area de un Circulo n este ejemplo se ingresa el radio de un circulo y el programa luego imprime su area. En este ejemplo se ilustra el manejo de numeros que incluyen puntos decimales o puntos flotantes. La estructura es casi identica a los dos ejemplos anteriores. La diferencia el es uso de las variables r y area. Donde el objeto x es una instancia de la clase Double. Se ilustra los principios fundamentales de la programacion orientada a objeto OOP: La eleccion de los objetos estan basados en las operaciones que se necesitan llevar a cabo para satisfacer lo que el programa debe llevar a cabo: 1. Entrada del valor de r en formato decimal; 2. Aplicar la formula del area de un circulo A=¹r^2; 3. Presentar la salida a la pantalla.

El paso uno requiere del uso de los objetos InputStreamReader y BufferedReader. El paso dos requiere el uso de un objeto Double y dos variables r y area. Y el paso tres requiere del objeto System.out.

D

VARIABLES Y OBJETOS

os tipos de entidades pueden almacenar data en java: variables y objetos. Una variable tiene un tipo y puede almacenar un solo tipo de variable o valor. Un objeto es la instancia de una clase y puede tener una coleccion de variables definida en ella. Hay nueve posible tipos en java. Pero programadores pueden definir todas las clases que deseen o necesiten. Un objeto es creado cuando es instancia con el operador new en un constructor y muere cuando ya no existe referencia a este. Ejemplo 1.5 Calcular el Area de un Circulo import java.io.*; public class area { public static void main(String[] args) throws Exception { InputStreamReader reader = new InputStreamReader(System.in); BufferedReader input = new BufferedReader(reader); System.out.print("Inserte el radio: "); String text = input.readLine(); Double x = new Double(text); double r = x.doubleValue(); System.out.println("el area del circulo de radio " + r); double area = Math.PI*r*r; System.out.println(" es " + area); } } Este programa usa dos variables r y area y cinco objetos reader, input, text, x y System.out. Ambas variables son double. Los objetos son instancias de las clases InputStreamReader, BufferedReader, String, Double y PrintStream, respectivamente. 13

E

Ejemplo 1.6 Tipos de Datos Primitivos ste programa simplemente declara e inicializa ocho variables, una por cada uno de los tipos disponibles en el lejuaje de JAVA. public class tipos { public static void main(String[] args) { char c = 'R'; byte j = 127; short k = 32727; int m = 2147483647; long n = 9223372036854775807L; float x = 3.141592653589793238; System.out.println("b =" + b); System.out.println("c =" + c); System.out.println("j =" + j); System.out.println("k =" + k); System.out.println("m =" + m); System.out.println("n =" + n); System.out.println("x =" + x); System.out.println("y =" + y); } } Fijese que la declaracion de char es entre comillas y que los longs contienen una L al final.

U

OPERADORES ARITMETICOS Y DE ASIGNACION

n operador es una funcion que que tiene un nombre simbolico especial y es invocado usando ese simbolo dentro de una expresion. Algunos ejemplos puede ser los siguientes:

E

n = 22 n += 22 ++n n / 22 n % 22

Ejemplo 1.7 Operadores de Decrementar e Incrementar ste programa mostramos como los de los enteros pueden ser cambiados con el operador de decrementar e incrementar -= and +=.. public class tipos { public static void main(String[] args) { char c = 'R'; byte j = 127; short k = 32727; System.out.println("c =" + c); 14

++c; System.out.println("c =" + c); ++c; System.out.println("c =" + c); System.out.println("j =" + j); ++j; System.out.println("j =" + j); --j; System.out.println("j =" + j); ++j; System.out.println("j =" + j); ++j; System.out.println("k =" + k); k -=4; System.out.println("k =" + k); k += 5; System.out.println("k =" + k); ++k; System.out.println("k =" + k); ++k; } } Ussamos los mismos variables que el del ejemplo 1.6. La expresion ++c significa que incremente la variable c al proximo valor. Tambien mostramos que pasa cuando una variable sobrepasa su valor del tipo se devuelve al negativo mas bajo, asi que cuando un char sobrepasa los 127 se devuelve a -128. En los ultimos ejemplo se muestran valores similar a -= y += en ejemplos como: k -= 4; lo que significa restarle 4 a k y reemplazar con este valor.

E

Ejemplo 1.8 Aritmetica ste programa mostramos el uso de los operadores aritmeticos +, -, *, / y el % en el lejuaje de JAVA. public class Aritmetica { public static void main(String[] args) { int n = 25; int m = 7; System.out.println("m =" + m); System.out.println("n =" + n); int sum = m + n; System.out.println("m + n" + sum); int diferencia = m - n; System.out.println("m - n =" + diferencia); int por = m * n; System.out.println("m * n =" + por); int entre = m / n; System.out.println("m / n =" + entre); 15

int residuo = m % n; System.out.println("m % n =" + residuo); } }

REPASO

Las repuestas a estas preguntas se encuentras en el Apéndice A. 1) ¿De cuando es JAVA? 2) ¿Cual compañía desarrolló JAVA? 3) ¿Que es el Codigo Fuente? 4) ¿De donde viene el codigo fuente? 5) ¿Que tipo de archivo contienen el fuente de JAVA? 6) ¿Que es el Bytecode? 7) ¿Que significa portable en el contexto de programacion? 8) ¿Cual es la diferencia entre el bytecode de Java y otros lenjuages de bajo nibel ? 9) ¿Cual es la diferencia entre un compilador y un interprete? 10) ¿Que es la maquina virtual de JAVA? 11) ¿Que es una aplicacion? 12) ¿Que es un desarrollador? 13) ¿Que es una API de JAVA? 14) ¿Que es un IDE? 15) ¿Que es el JDK? 16) ¿Que es el JIT? 17) ¿Que es el JVM? 18) ¿Que es la diferencia entre el comentario tipo C y C++? 19) ¿Que es un objeto “stream”? 20) ¿Que es una exception? 21) ¿Quer significa caso-sensitivo? 22) ¿Cual es la diferencia entre una variable y un objeto? 23) ¿Cuales son los 8 tipos primitivos de JAVA? 24) ¿Que es un tipo referenciable? 25) ¿Que es sobre carga (Overflow) de Enteros?

PREGUNTAS POST- EXAMEN

Las repuestas a estas preguntas se encuentras en el Apéndice B 1.

Modifique el Ejercicio 1.1 para que imprima el siguiente Objeto:

String mensaje = “Hola, Mundo!”; 2.

Escriba y ejecute un programa que inicialize un objeto String con su nombre y lo imprima en tres lineas por separado asi: nombre nombre nombre

3. Escriba y ejecute un programa que inicialize un objeto String con su nombre y lo imprima en una linea 16

separado por espacio asi: nombre nombre nombre

4. Escriba y ejecute un programa que le pida al usuario por su apellido y nombre y luego lo imprima con un saludo asi: Digite su apellido por favor: Torvalds Digite su nombre por favor: Linus Hola, Linus Torvalds 5. Escriba y ejecute un programa que inicialize un entero n con el valor de 5814y luego utilizando los operadores quotient % y el restante para extraer e imprima cada digito de n, asi: n = 5814 Los digitos de n son 5, 8, 1, y el 4

6. Escriba y ejecute un programa que ingrese un entero que represente una temperatura en grados Fahrenheit y lo convierta a su equivalente en grados Celsios de forma decimal. La formula de conversion ed la siguiente C = 5(F - 32)/9.

17

CAPITULO 2

FUNDAMENTOS JAVA SOBRE GNU/LINUX

STRINGS OBJETIVOS Al completar éste Capitulo, usted podrá: • Manipular la clase string y sus metodos • Declarar y manipular entrada de cadenas desde la linea de comandos • Manipular los arreglos de java

PREGUNTAS PRE-EXAMEN

Las repuestas se encuentran en el Apéndice A al final del Libro.

1. ¿Que substring es retornada por la llamada alfabeto.substring(6, 10)?

2. ¿De que longitud es la subcadena retornada por la llamada alfabeto.substring(9, 16)?

3. ¿Porque tiene la llamada alfabeto.substring(14, 14) que la llamada alfabeto.substring(4, 4)? 4. ¿Porque fracasaria la llamada a alfabeto.substring(41, 41)? 5. ¿Que es sobrecarga “Overloading”?

6. ¿Que es la “composicion de metodos”?

7. ¿Cual es la diferencia entre la class String y la class StringBuffer?

8. ¿Cual es la diferencia entre la capacidad y su longitud de un objeto del tipo StringBuffer?

18

U

LA CLASE STRING

na cadena es una sequencia de caracteres. Palabras, oraciones y nombres son cadenas o strings. El mensaje “Hola, Mundo!” es una cadena. En este capitulo cubriremos las dos clases fundamentales de cadenas de Java String y StringBuffer.

L

a primera es la clase string la cual en Java es un objeto del tipo String. Estos objetos son inmutables; ellos no pueden ser cambiados.

Ejemplo 2.1 Un objeto de String Simple public class alfabeto { public static void main(String[] args) { //este es al claracion de un strign. //new String(""); String alfabeto = "ACBDEFGHIJKLMNOPQRSTUVWXYZ"; System.out.println(alfabeto); System.out.println("El String contiene" +" " + alfabeto.length() +" " + "caracteres"); System.out.println("El caracter ubicado en el puesto 4 es:" + alfabeto.charAt(4)); System.out.println("El puesto del caracter G es el :" + alfabeto.indexOf('G')); System.out.println("el picadillo de codigo del string es :" + alfabeto.hashCode()); System.out.println("LAs posiciones 4, 8, 1 y 26 nos dan la siguiente palabra: " + alfabeto.charAt(3) + alfabeto.charAt(8) + alfabeto.charAt(0) + alfabeto.charAt(25) ); } } El objeto de nombre alfabeto es declarado en la tercera linea a ser una instancia de la clase String y es inicializada al valor literal de ABCDEFGHIJKLMNOPQRSTUVWXYZ.

U

Las Subcadenas

na subcadena es una sequencia de caracteres que forman parte de una cadena. La clase cadena contiene el metodo subcadena() para extraer subcadenas desde un string. En el siguiente ejemplo se ilustra el uso del metodo substring().

Ejemplo 2.2 Un objeto de String Simple public class Substring { public static void main(String[] args) { String alfabeto = "ACBDEFGHIJKLMNOPQRSTUVWXYZ"; System.out.println(alfabeto); System.out.println("La subcadena posicion desde el 4 hasta 8" +" " + alfabeto.substring(4,8)); System.out.println("La subcadena posicion desde el 4 hasta 4" +" " + alfabeto.substring(4,4)); System.out.println("La subcadena posicion desde el 4 hasta 5" +" " + alfabeto.substring(4,5)); System.out.println("La subcadena posicion desde el 0 hasta 8" +" " + alfabeto.substring(0,8)); System.out.println("La subcadena posicion desde el 8 hasta el Final" +" " + alfabeto.substring(8)); } } Este programa usa el mismo objeto alfabeto del ejemplo 2.1. Manipula la misma cadena atraves del metodo substring() para imprimir diferentes partes de la cadena alfabeto 19

J

Cambiar el Caso (Mayus-Minuzculas)

ava distingue entre las mayusculas y las minusculas. Su clase String incluye metodos para cambiar las letras de una cadena de una a la otra. Estos metodos son ilustrados a continuacion..

Ejemplo 2.3 Mayusculas y Minusculas public class ChanginCase { public static void main(String[] args) { String texto1 = "toLowerCase"; String texto2 = "toUppercase"; System.out.println("Texto1 inicial:" +texto1); //String sbislc = texto1.toLowerCase(); System.out.println("Transforma todos los caracteres del texto1 a minusculas:" +texto1.toLowerCase()); System.out.println("Texto2 inicial:" +texto2); String sbisuc = texto2.toUpperCase(); System.out.println("Transforma todo los caracteres del texto2 a MAYUSCULAS:" +sbisuc); } }

Y

Concatenar

a hemos usado el operador de concatencacion desde el capitulo uno para manipular las cadenas (+). En este ejemplo demostramos como puede ser usado para formar strings mayores de mas pequeñas.

Ejemplo 2.4 Concatenar public class Concatenacion { public static void main(String[] args) { String nombre1 = " James"; String nombre2="Gosling"; System.out.println(nombre1 + nombre2); System.out.println(nombre1 + " " + nombre2); System.out.println(nombre1 + " , " + nombre2); String nombres=nombre1 + " " + nombre2; System.out.println(nombres); } }

L

Localizar un Caracter en una Cadena

os metodos indexOf() y lastIndexOf() devuelven el numero del index de un caracter en una cadena.

Ejemplo 2.5 Buscar un Caracter en una Cadena public class SearchingForChars { public static void main(String[] args) { String texto = "El texto es : Esta Isla es la Republica Dominicana, m@r k@ribe"; System.out.println(texto); 20

}

}

int i = texto.indexOf('a'); System.out.println("La primera posicion de 'a' es " + i); int j = texto.indexOf('a', i+1); System.out.println("El siguiente posicion de 'a' es " + j); int k = texto.indexOf('a' , j+1); System.out.println("La siguiente posicion de 'a' es " + k); k = texto.lastIndexOf('a'); System.out.println("La pen√∫ltima posicion de 'a' es " + k); System.out.println(texto.substring(k));

Este programa se usan dos versiones del metodo indexOf() una con un solo parametro y el otro con dos, esto es llamado sobrecarga o overloading, que es el uso de un mismo metodo con diferente nuemro de parametros.Esto es muy comun en JAVA. El compilador puede decifrar cual metodo se requiere deduciendo del nuemro de parametros que envia.

L

Reemplazar un Caracter en una Cadena

a clase String incluye un metodo replace()el cual reemplaza cada ocurrencia de un caracter con otro en una cadena.

Ejemplo 2.6 Reemplazar Caracteres en una Cadena public class Replacing { public static void main(String[] args) { String inventor = "Galileo, el padre de las ciencias modernas "; System.out.println(inventor); System.out.println(inventor.replace('p' , 'P')); System.out.println(inventor.replace('m' , 'M')); System.out.println(inventor); } } Este programa la llamada a inventor.replace(‘p’, ‘P’); reemplaza toda ocurrencia de p minuscula por P mayuscula en la cadea inventor que es padre por Padre en este caso. La sentencia System.out.println(inventor.replace('p' , 'P')); compone (composes) el metodo replace() con el metodo println. En este ejemplo el metodo replace() se le pasa inmediatamente al metodo println(). Este un objeto anonimo lo que quiere decir que no tiene nombre.. Composicion es una manera eficiente usada para prevenir proliferacion. Sin el uso de composicion requiere que declaremos de dos objetosString adicionales.

L

Representar un Valor Primitivo como una Cadena

os valores primitivos como es el 68 son realmente caracteres ordinarios. El valor del tipo float 3.14 se lee y se imprime como una cadena que consiste de ‘3’, ‘.’, ‘1’ y el ‘4’. Asi que no es sorprendente tener que converit de un tipo a otro. Ejemplo 2.7 Convertir los Tipos Primitivos a Cadenas o Strings public class TestValueOf { public static void main(String[] args) { boolean b = true;

21

char c = '$'; int n = 44; double x = 3.1415923585152; System.out.println("b = System.out.println("c = System.out.println("n = System.out.println("x =

" + b); " + c); " + n); " + x);

String strb = String.valueOf(b); String strc = String.valueOf(c); String strn = String.valueOf(n); String strx = String.valueOf(x);

}

}

System.out.println("strb = System.out.println("strc = System.out.println("strn = System.out.println("strx =

" + strb); " + strc); " + strn); " + strx);

Ejemplo 2.8 Convertir Strings a Tipos Este ejemplo muestra como efectuar operaciones aritmetica sobre valores numericos embedidos en cadenas. public class TestConversions { public static void main(String[] args) { String today = " Abril 24 del 1965"; String todaysDayString = today.substring(4,6); int todaysDayInt = Integer.parseInt(todayDayString); int nextWeeksDayInt= todaysDayInt + 7; String nextWeek = today.substring(0,4) + nextWeeksDayInt + today.substring(6); System.out.println("La fecha de hoy es " + today); System.out.println("Hoy es " + todayDaysInt); System.out.println("La proxima semana sera " + nextWeeksDayInt); System.out.println("La proxuima semana la fecha sera " + nextWeek); }

} Este ejemplo define tres objetos String (today, todaysDayString y nextWeek) y dos variables int (todaysDayInt y nextWeeksDayInt). La ejecusion de la sentencia: . int todaysDayInt = Integer.parseInt(todayDayString); efectua las siguientes tareas: 1. Declara la variable todayDayInt con el tipo int.

2. Invoca el metodo parseInt() definido en la clase Integer, pasandole un objeto del tipo String de nombre todaysDayString.

3. El metodo parseInt() lee dos caracteres ‘1’ y el ‘8’ desde la cadena todaysDayString, lo convier22

te a a su valor numerico equivalente de 1 y 8, lo combina para formar el valor 18, y retorna su valor int.

4. El valor de 18 retornado es usado para inicializar la variable del tipo int todaysDayInt. En este ejemplo usamos la clase Integer llamada la clase wrapper ya que esta encapsula el tipo primitivo int. Cadad uno de los ocho tipos primitivos tiene su clase wrapper correspondiente. Los nombres son Boolean, Character, Byte, Short, Integer, Long, Float y Double. La razon de las clase wrapper es proveer metodos para estos tipos primitivos. Por ejemplo en la clse Integer provee el metodo parseInt() para los valores int.

L

La Clase StringBuffer

a clase String es una d elas mas usadas en Java. Pero sus instancias (objetos) sufren de la restriccion de ser inmutable; ellas no pueden ser cambiadas. En todos los ejemplo anteriores, donde modificamos un string, teniamos que construir un objeto del tipo String, o explicitamente o implicito. Java nos provee una clas por separado StringBuffer para los strings que deben ser cambiados. La razon para esto es que la posibilidad de cambiar un string produce una situacion de complejidad y las variables ocupan mas espacio. En sitiuaciones donde los strings no deben ser cambiadas podemos usar la mas simple clase string. Ejemplo 2.9 Usar el Objeto StringBuffer public class TestStringBuffer { public static void main(String[] args) { StringBuffer buf = new StringBuffer(10); System.out.println("buf =" + buf); System.out.println("buf.length()=" + buf.length()); System.out.println("buf.capacity()" + buf.capacity()); } } En este ejemplo en la tercera linea se crea un objeto StringBuffer de nombre buf con capacidad de 10 caracteres vacio. Esto ilustra una caracteristica esencial de el objeto StringBuffer: ellos pueden contener celdas vacias, los objetos String no!.

E

Ejemplo 2.10 Modificar Objetos StringBuffer n este programa se demuestra la dlexibilidad de los objetos StringBuffer. Se crea un objeto de nombre buf, el cual luego es modificado varias veces usando concatenacion y el metodo append(). public class TestAppending { public static void main(String[] args) { StringBuffer buf = new StringBuffer(10); buf.append("It was");

System.out.println("buf =" + buf); System.out.println("uf.length() =" + buf.length()); System.out.println("buf.capacity() =" +buf.capacity()); buf.append(" the best"); 23

System.out.println("buf = " +buf); System.out.println("buf.length() = " +buf.length()); System.out.println("buf.capacity() = " + buf.capacity());

}

}

buf.append(" of times"); System.out.println("buf = " +buf); System.out.println("buf.length() = " +buf.length()); System.out.println("buf.capacity() = " + buf.capacity());

Se inicializa el objeto StringBuffer buf vacio de capacidad de 10 caracteres con la sentencia buf.append(“It was”) 6 de sus dies caracteres son usados. buf.append(“ the best”) lo expande a capacidad de 22 de los cuales 15 estan en uso. Fijese la diferencia entre capacidad y longitud del objeto. La capacidad del objeto es cambiada por el sistema operativo cuando sea necesario. Cada vez que esto sucede se consume recursos moviendolo a ram, asi que es mejor planificarlo y solo usarlo cuando es absolutamente necesario.

E

Ejemplo 2.11 Reemplazar Objetos StringBuffer n este programa se demuestra como modificar el contenido del buffer. public class BufReplacing { public static void main(String[] args) { StringBuffer buf = new StringBuffer(); buf.append("Era el ejor de la epoca"); System.out.println(" buf = " + buf); System.out.println("buf.length() =" +buf.length()); System.out.println("buf.capacity() = " + buf.capacity()); buf.setCharAt(7, 'M' ); System.out.println("buf = " + buf);

}

}

buf.setCharAt(19, 'é'); System.out.println("buf = " + buf);

Para cambiar la cadena tenemos que cambiar dos caracteres con el metodo setCharAt() y invocar el metodo insert() para insertar un caracter nuevo esto demuestra que la clase StringBuffer no es muy buena para editar cadenas.

24

Ejemplo 2.12 Convertir Objetos StringBuffer a Objetos Strings public class TestToString {

}

public static void main(String[] args) { StringBuffer buf = new StringBuffer("It was thr age of wisdom,"); System.out.println("buf =" + buf) System.out.println("buf.length() = " + buf.length()); System.out.println("buf.capacity() = " + buf.capacity()); String str = buf.toString(); System.out.println("str =" + str); System.out.println("str.length() = " + str.length()); buf.append(" " + str.substring(0, 18) + "foolishness,"); System.out.println("buf = " + buf); System.out.println("buf.length() = " + buf.length()); System.out.println("buf.capacity() = " + buf.capacity()); System.out.println("str = " + str); }

El objeto buf es creado de longitud de 25 carcacteres con una capacidad de 41 caracter al inicializarlo con el String literal de "It was thr age of wisdom,") esta cadena tiene 25 caracterews.Aqui se ilustra una manera aalternativa de inicializar un objeto StringBuffer; usted puede ademas especificar si capacidad explicitamente haciendolo de longitud 0 como se hixo en el ejemplo 2.9 o usted puede especificar su contenido inicial explicitamente, haciendolo de longitud igual al numero de caracteres en la cadena dejando que el sistema operativo lo estblesca inicialmente. La sentencia String str = buf.capacity(); Crea un objeto del tipo String que puede contener 25 caracteres que se encuentran en el objeto StringBuffer buf. La sentencia buf.append(“ “ + str.substring(0, 18) + foolishness,”) modifica el objeto StringBuffer buf agregandole otra clausura mas, Esto no tiene ningun efecto ssobre el objeto independiente str, como lo muestra la ultima linea. Ejemplo 2.13 Reestablecer la Longitud y Devolver el valor de un Objetos StringBuffer En este programa sse ilustra los metodos setLength() y reverse(). public class TestSetLength { public static void main(String[] args) { StringBuffer buf = new StringBuffer("It is a far, far better thing thath i do"); System.out.println("buf =" + buf); System.out.println("buf.length() = " + buf.length()); System.out.println("buf.capacity() =" + buf.capacity()); buf.setLength(60); System.out.println("buf = " + buf); System.out.println("buf.length() = " + buf.length()); System.out.println("buf.capacity() =" + buf.capacity()); 25

buf.reverse(); System.out.println("buf = " + buf); System.out.println ("buf+" + buf.length()); System.out.println("buf.capacity() = " + buf.capacity()); } } La sentencia buf.setLength(60); incrementa la longitud de 39 a 60 agregandole 21 caracter null a la cadena. Pero este cambio no se nota desde la salida del buffer. La sentencia buf.setLength(30) establece la longitud de 60 a 30 caracteres eliminando los ultimos 30 caracteres: los 9 caractere s en la subcadena “that I do” y los 21 caracteres null que agregamos anteriormente. Fijese que la capacida no es alterada. La sentencia buf.reverse(); reestablece la cadena al objeto buf.

REPASO

Las repuestas a estas preguntas se encuentras en el Apéndice A. 1. ¿Que substring es retornada por la llamada alfabeto.substring(6, 10)?

2. ¿De que longitud es la subcadena retornada por la llamada alfabeto.substring(9, 16)?

3. ¿Porque tiene la llamada alfabeto.substring(14, 14) que la llamada alfabeto.substring(4, 4)? 4. ¿Porque fracasaria la llamada a alfabeto.substring(41, 41)? 5. ¿Que es sobrecarga “Overloading”?

6. ¿Que es la “composicion de metodos”?

7. ¿Cual es la diferencia entre la class String y la class StringBuffer?

8. ¿Cual es la diferencia entre la capacidad y su longitud de un objeto del tipo StringBuffer?

PREGUNTAS POST- EXAMEN

Las repuestas a estas preguntas se encuentras en el Apéndice B 1.

Modifique el Ejercicio 2.1 para que imprima su nombre y sus atributos.

2. Modifique el Ejercicio 2.2 para que imprima el nombre de su padre y sus atributos.

3. Escriba y ejecute un programa que efectue lo siguiente: 1. Declare un Objeto String s que contenga la cadena “Mi nombre es Linus” 2. Imprima la cadena completa 3. Use el metodo charAt() para imprimir la longitud de la cadena 4. Use el metodo charAt() para imprimir el primer caracter de la cadena 5. Use los metodos charAt() y el length() para imprimir el ultimo caracter en la cadena. 6. Use los metodos indexOf() y substring() para imprimir la primera palabra en la cadena 26

4. Re-escriba y ejecute el programa 2.6 para que este no use composicion. 5.

Escriba y ejecute un programa que ingrese un numero de 10 digitos como el de un telefono, del cual extraiga la area code de 3 digitos, los tres digitos de intercambio y los cuatro restantes que se vea asi: Digite los 10 numeros telefonicos: 8097245543 Usted digito: 8097245543 El codigo de area es: 809 El numero de intercambio es: 724 El nuemero es el: 5543 El numero completo es el: (809)724-5543

6. Escriba y ejecute un programa que uste ingrese una fecha pre Y2K wn wl formato digamos 06/30/98 y que se la imprima en el formato extendido de 06/30/1998.

27

28

29

CAPITULO 3

FUNDAMENTOS JAVA SOBRE GNU/LINUX

SELECCION OBJETIVOS Al completar éste Capitulo, usted podrá: • Implementar bucles • Manejar bucles anidados • Operadores condicionales

PREGUNTAS PRE-EXAMEN

Las repuestas se encuentran en el Apéndice A al final del Libro.

1. ¿Que es un bucle?

2. ¿Nombre cuatro clase de bucles de condicion? 3. ¿Cual es la diferencia entre el for y el while?

4. ¿Diferencia entre do... while y el while simple? 5. ¿Cuando se debe emplear un casse?

30

L

La Sentencia if

a sentencia if permite una ejecusion condicional. Los comandos incluido dentro de su cuerpo seran ejecutados solo si la condicion es verdadera. El sintaxis de la sentencia if es:

D

if (condicion) sentencia; onde la condicion es una expresion boolean. Una expresion booleana es una expresion que sel valor de su tipo es boolean.

Ejemplo 3.1 Probar un Entero Random por Negatividad En este programa se usa un generador para generar un entero al azar o random. Luego este reporta si el entero es negativo: import java.util.Random; public class Ejemplo03_01 { public static void main(String[] args) { Random random = new Random(); int n = random.nextInt(); System.out.println(" n = " + n); if (n < 0) System.out.println("**** n > 0"); System.out.println("Goodbye."); } }

En la primera linea importamos la clase random para generar un numero al azar llamado random. Luego le pasamos el valor de random se le asignan a n. Si la condicion es verdadera se ejecuta la sentencia sino se sale del bucle. Un nuemro random es generado por cierto proceso que es dificil de predecir. El metodo de java nextInt() ..

L

Las Sentencia if...else

a sentencia if...else es la misma que la if con una clausula de else agregada, y asi cuando la condicion del if no se cumple entonces se se ejecuta las ordenes debajo del la clausula else.uno de las dos sentencias se ejecutaran. EL sintaxis del if.. else es asi: if (condicion) sentencia; 1 else sentencia 3;

Ejemplo 3.2 Probar dos Enteros para Seleccionar el Maximo En este programa se usa un generador para generar dos enteros m y n al azar o random. Luego se reporta cual de los dos es de mayor valor: import java.util.Random; public class Ejemplo3_02 { public static void main(String[] args); { Random random = new Random(); int m = random.nextInt(); System.out.prinln("m = " + m); int n = random.nextInt(); 31

}

System.out.println("n = " + n); if (m < n ) System.out.println("The minimum is " + m); else System.out.println("The minimum is " + n);

} Este programa es similar al Ejemplo 3.1.

E

La Combinacion if...else...if

n la combinacion if...else...if permite la ejecusion basada en dos alternativas. Si tienes mas de dos posibles alternativas, debera usar esta secuencia.

Ejemplo 3.3 Elegir Entre Cuatro Alternativas En este programa se usa un generador para generar dos enteros m y n al azar o random. Luego se reporta cual de los dos es de mayor valor: import java.util.Tandom; public class Ejemplo3_03 { public static void main (String[] args) {Random random= new.Random(); double t = = random.nextDouble(); System.out.println("t = " + t); if (t < 0.25) System.out.println("0