Вы находитесь на странице: 1из 35

Programacin III Introduccin al Java..

La Maquina Virtual de Java


El lenguaje Java es a la vez compilado e interpretado. Con el compilador se convierte el
cdigo fuente que reside en archivos cuya extensin es .java, a un conjunto de
instrucciones que recibe el nombre de bytecodes que se guardan en un archivo cuya
extensin es .class. Estas instrucciones son independientes del tipo de ordenador. El
intrprete ejecuta cada una de estas instrucciones en un ordenador especfico (Windows,
Macintosh, etc). Solamente es necesario, por tanto, compilar una vez el programa, pero se
interpreta cada vez que se ejecuta en un ordenador.

Cada intrprete Java es una implementacin de la Mquina Virtual Java (JVM). Los
bytecodes posibilitan el objetivo de "write once, run anywhere", de escribir el programa
una vez y que se pueda correr en cualquier plataforma que disponga de una implementacin
de la JVM. Por ejemplo, el mismo programa Java puede correr en Windows 98, Solaris,
Macintosh, etc.
Java es, por tanto, algo ms que un lenguaje, ya que la palabra Java se refiere a dos
cosas inseparables: el lenguaje que nos sirve para crear programas y la Mquina Virtual
Java que sirve para ejecutarlos. Como vemos en la figura, el API de Java y la Mquina
Virtual Java forman una capa intermedia (Java platform) que asla el programa Java de las
especificidades del hardware (hardware-based platform).

La Mquina Virtual Java


La Mquina Virtual Java (JVM) es el entorno en el que se ejecutan los programas Java, su
misin principal es la de garantizar la portabilidad de las aplicaciones Java. Define
esencialmente un ordenador abstracto y especifica las instrucciones (bytecodes) que este
ordenador puede ejecutar. El intrprete Java especfico ejecuta las instrucciones que se
guardan en los archivos cuya extensin es .class. Las tareas principales de la JVM son
las siguientes:
Reservar espacio en memoria para los objetos creados
Liberar la memoria no usada (garbage collection).
Asignar variables a registros y pilas
Llamar al sistema husped para ciertas funciones, como los accesos a los
dispositivos
Vigilar el cumplimiento de las normas de seguridad de las aplicaciones Java

Programacin III Introduccin al Java..

Esta ltima tarea, es una de las ms importantes que realiza la JVM. Adems, las propias
especificaciones del lenguaje Java contribuyen extraordinariamente a este objetivo:
Las referencias a arrays son verificadas en el momento de la ejecucin del programa
No hay manera de manipular de forma directa los punteros
La JVM gestiona automticamente el uso de la memoria, de modo que no queden huecos.
No se permiten realizar ciertas conversiones (casting) entre distintos tipos de
datos.
Por ejemplo, cuando el navegador encuentra una pgina web con un applet, pone en marcha
la JVM y proporciona la informacin que aparece en la etiqueta <APPLET > ... </APPLET>.
El cargador de clases dentro de la JVM ve que clases necesita el applet. Dentro del
proceso de carga, las clases se examinan mediante un verificador que asegura que las
clases contienen cdigo vlido y no malicioso. Finalmente, se ejecuta el applet.El
lenguaje Java
El lenguaje Java no est diseado solamente para crear applets que corren en la ventana
del navegador. Java es un lenguaje de propsito general, de alto nivel, y orientado a
objetos.
Java es un lenguaje de programacin orientado a objetos puro, en el sentido de que no hay
ninguna variable, funcin o constante que no est dentro de una clase. Se accede a los
miembros dato y las funciones miembro a travs de los objetos y de las clases. Por
razones de eficiencia, se han conservado los tipos bsicos de datos, int, float, double,
char, etc, similares a los del lenguaje C/C++.
Los tipos de programas ms comunes que se pueden hacer con Java son los applets (se
ejecutan en el navegador de la mquina cliente) y las aplicaciones (programas que se
ejecutan directamente en la JVM). Otro tipo especial de programa se denomina servlet que
es similar a los applets pero se ejecutan en los servidores Java.
La API de Java es muy rica, est formada un conjunto de paquetes de clases que le
proporcionan una gran funcionalidad. El ncleo de la API viene con cada una de las
implementaciones de la JVM:
Lo esencial: tipos de datos, clases y objetos, arrays, cadenas de caracteres
(strings), subprocesos (threads), entrada/salida, propiedades del sistema, etc.
Applets
Manejo de la red (networking)
Internacionalizacin
Seguridad
Componentes (JavaBeans)
Persistencia (Object serialization)
Conexin a bases de datos (JDBC)
Java proporciona tambin extensiones, por ejemplo define un API para 3D, para los
servidores, telefona, reconocimiento de voz, etc.

Identificadores, Comentarios, Sentencias, Bloque de cdigo,


Expresiones, Variables, Tipos bsicos de datos, Cadenas de
caracteres o String. Palabras Reservadas
La sintaxis de un lenguaje define los elementos de dicho lenguaje y cmo se combinan para
formar un programa. Los elementos tpicos de cualquier lenguaje son los siguientes:
Identificadores: los nombres que se dan a las variables
Tipos de datos
Palabras reservadas: las palabras que utiliza el propio lenguaje
Sentencias
Bloques de cdigo
Comentarios
Expresiones
Operadores
A lo largo de las pginas que siguen examinaremos en detalle cada uno de estos elementos.

Programacin III Introduccin al Java..

Identificadores
Un identificador es un nombre que identifica a una variable, a un mtodo o funcin
miembro, a una clase. Todos los lenguajes tienen ciertas reglas para componer los
identificadores:
Todos los identificadores han de comenzar con una letra, el carcter subrayado ( _
) o el carcter dlar ( $ ).
Puede incluir, pero no comenzar por un nmero
No puede incluir el carcter espacio en blanco
Distingue entre letras maysculas y minsculas
No se pueden utilizar las palabras reservadas como identificadores
Adems de estas restricciones, hay ciertas convenciones que hacen que el programa sea ms
legible, pero que no afectan a la ejecucin del programa. La primera y fundamental es la
de encontrar un nombre que sea significativo, de modo que el programa sea lo ms legible
posible. El tiempo que se pretende ahorrar eligiendo nombres cortos y poco significativos
se pierde con creces cuando se revisa el programa despus de cierto tiempo.
Tipo de
Convencin
Ejemplo
identificador
nombre de una
Comienza por letra
String, Rectangulo,
clase
mayscula
CinematicaApplet
comienza con letra
calcularArea, getValue,
nombre de funcin
minscula
setColor
comienza por letra
nombre de variable
area, color, appletSize
minscula
nombre de
En letras maysculas
PI, MAX_ANCHO
constante
Comentarios
Un comentario es un texto adicional que se aade al cdigo para explicar su
funcionalidad, bien a otras personas que lean el programa, o al propio autor como
recordatorio. Los comentarios son una parte importante de la documentacin de un
programa. Los comentarios son ignorados por el compilador, por lo que no incrementan el
tamao del archivo ejecutable; se pueden por tanto, aadir libremente al cdigo para que
pueda entenderse mejor.
La programacin orientada a objetos facilita mucho la lectura del cdigo, por lo que lo
que no se precisa hacer tanto uso de los comentarios como en los lenguajes estructurados.
En Java existen tres tipos de comentarios
Comentarios en una sola lnea
Comentarios de varias lneas
Comentarios de documentacin
Como podemos observar un comentario en varias lneas es un bloque de texto situado entre
el smbolo de comienzo del bloque /*, y otro de terminacin del mismo */. Teniendo
encuentra este hecho, los programadores disean comentarios como el siguiente:
/*--------------------------------|
|
(C) Angel Franco Garca
|
|
fecha: Marzo 1999
|
|
programa: PrimeroApp.java
|
|---------------------------------*/
Los comentarios de documentacin es un bloque de texto situado entre el smbolo de
comienzo del bloque /**, y otro de terminacin del mismo */. El programa javadoc utiliza
estos comentarios para generar la documentacin del cdigo.
/** Este es el primer programa de una
serie dedicada a explicar los fundamentos del lenguaje Java */
Habitualmente, usaremos comentarios en una sola lnea //, ya que no tiene el
inconveniente de aprendernos los smbolos de comienzo y terminacin del bloque, u
olvidarnos de poner este ltimo, dando lugar a un error en el momento de la compilacin.
En la ventana de edicin del Entorno Integrado de Desarrollo (IDE) los comentarios se
distinguen del resto del cdigo por el color del texto.
public class PrimeroApp{

Programacin III Introduccin al Java..

public static void main(String[] args) {


//imprime un mensaje
System.out.println("El primer programa");
}
}
Un procedimiento elemental de depuracin de un programa consiste en anular ciertas
sentencias de un programa mediante los delimitadores de comentarios. Por ejemplo, se
puede modificar el programa y anular la sentencia que imprime el mensaje, poniendo
delante de ella el delimitador de comentarios en una sola lnea.
//System.out.println("El primer programa");
Al correr el programa, observaremos que no imprime nada en la pantalla.
La sentencia System.out.println() imprime un mensaje en la consola, una ventana DOS que
se abre en el escritorio de Windows 95. La funcin println tiene un slo argumento una
cadena de caracteres u objeto de la clase String.
Sentencias
Una sentencia es una orden que se le da al programa para realizar una tarea especfica,
esta puede ser: mostrar un mensaje en la pantalla, declarar una variable (para reservar
espacio en memoria), inicializarla, llamar a una funcin, etc. Las sentencias acaban con
;. este carcter separa una sentencia de la siguiente. Normalmente, las sentencias se
ponen unas debajo de otras, aunque sentencias cortas pueden colocarse en una misma lnea.
He aqu algunos ejemplos de sentencias
int i=1;
import java.awt.*;
System.out.println("El primer programa");
rect.mover(10, 20);
En el lenguaje Java, los caracteres espacio en blanco se pueden emplear libremente. Como
podremos ver en los sucesivos ejemplos, es muy importante para la legibilidad de un
programa la colocacin de unas lneas debajo de otras empleando tabuladores. El editor
del IDE nos ayudar plenamente en esta tarea sin apenas percibirlo.
Bloques de cdigo
Un bloque de cdigo es un grupo
de cdigo est limitado por las
de cdigo tenemos la definicin
sentencia iterativa for, los
excepciones, etc.

de sentencias que se comportan como una unidad. Un bloque


llaves de apertura { y cierre }. Como ejemplos de bloques
de una clase, la definicin de una funcin miembro, una
bloques try ... catch, para el tratamiento de las

Expresiones
Una expresin es todo aquello que se puede poner a la derecha del operador asignacin =.
Por ejemplo:
x=123;
y=(x+100)/4;
area=circulo.calcularArea(2.5);
Rectangulo r=new Rectangulo(10, 10, 200, 300);
La primera expresin asigna un valor a la variable x.
La segunda, realiza una operacin
La tercera, es una llamada a una funcin miembro calcularArea desde un objeto circulo de
una clase determinada
La cuarta, reserva espacio en memoria para un objeto de la clase Rectangulo mediante la
llamada a una funcin especial denominada constructor.
Variables
Una variable es un nombre que se asocia con una porcin de la memoria del ordenador, en
la que se guarda el valor asignado a dicha variable. Hay varios tipos de variables que
requieren distintas cantidades de memoria para guardar datos.
Todas las variables han de declararse antes de usarlas, la declaracin consiste en una
sentencia en la que figura el tipo de dato y el nombre que asignamos a la variable. Una
vez declarada se le podr asignar valores.
Java tiene tres tipos de variables:
de instancia
de clase

Programacin III Introduccin al Java..

locales
Las variables de instancia o miembros dato como veremos ms adelante, se usan para
guardar los atributos de un objeto particular.
Las variables de clase o miembros dato estticos son similares a las variables de
instancia, con la excepcin de que los valores que guardan son los mismos para todos los
objetos de una determinada clase. En el siguiente ejemplo, PI es una variable de clase y
radio es una variable de instancia. PI guarda el mismo valor para todos los objetos de la
clase Circulo, pero el radio de cada crculo puede ser diferente
class Circulo{
static final double PI=3.1416;
double radio;
//...
}
Las variables locales se utilizan dentro de las funciones miembro o mtodos. En el
siguiente ejemplo area es una variable local a la funcin calcularArea en la que se
guarda el valor del rea de un objeto de la clase Circulo. Una variable local existe
desde el momento de su definicin hasta el final del bloque en el que se encuentra.
class Circulo{
//...
double calcularArea(){
double area=PI*radio*radio;
return area;
}
}
En el lenguaje Java, las variables locales se declaran en el momento en el que son
necesarias. Es una buena costumbre inicializar las variables en el momento en el que son
declaradas. Veamos algunos ejemplos de declaracin de algunas variables
int x=0;
String nombre="Angel";
double a=3.5, b=0.0, c=-2.4;
boolean bNuevo=true;
int[] datos;
Delante del nombre de cada variable se ha de especificar el tipo de variable que hemos
destacado en letra negrita. Las variables pueden ser
Un tipo de dato primitivo
El nombre de una clase
Un array
El lenguaje Java utiliza el conjunto de caracteres Unicode, que incluye no solamente el
conjunto ASCII sino tambin carateres especficos de la mayora de los alfabetos. As,
podemos declarar una variable que contenga la letra
int ao=1999;
Se ha de poner nombres significativos a las variables, generalmente formados por varias
palabras combinadas, la primera empieza por minscula, pero las que le siguen llevan la
letra inicial en maysculas. Se debe evitar en todos los casos nombres de variables
cortos como xx, i, etc.
double radioCirculo=3.2;
Las variables son uno de los elementos bsicos de un programa, y se deben
Declarar
Inicializar
Usar
Tipos de datos primitivos
Tipo
Descripcion
boolean Tiene dos valores true o false.
Caracteres Unicode de 16 bits Los caracteres alfa-numricos son los
char
mismos que los ASCII con el bit alto puesto a 0. El intervalo de
valores va desde 0 hasta 65535 (valores de 16-bits sin signo).
Tamao 8 bits. El intervalo de valores va desde -27 hasta 27 -1 (byte
128 a 127)

Programacin III Introduccin al Java..

Tamao 16 bits. El intervalo de valores va desde -215 hasta 215-1 (short


32768 a 32767)
Tamao 32 bits. El intervalo de valores va desde -231 hasta 231-1 (int
2147483648 a 2147483647)
Tamao 64 bits. El intervalo de valores va desde -263 hasta 263-1 (long
9223372036854775808 a 9223372036854775807)
Tamao 32 bits. Nmeros en coma flotante de simple precisin.
float
Estndar IEEE 754-1985 (de 1.40239846e45f a 3.40282347e+38f)
Tamao 64 bits. Nmeros en coma flotante de doble precisin.
double
Estndar IEEE 754-1985. (de 4.94065645841246544e324d a
1.7976931348623157e+308d.)
Los tipos bsicos que utilizaremos en la mayor parte de los programas sern boolean, int
y double.
Caracteres
En Java los caracteres no estn restringidos a los ASCII sino son Unicode. Un carcter
est siempre rodeado de comillas simples como 'A', '9', '', etc. El tipo de dato char
sirve para guardar estos caracteres.
Un tipo especial de carcter es la secuencia de escape, similares a las del lenguaje
C/C++, que se utilizan para representar caracteres de control o caracteres que no se
imprimen. Una secuencia de escape est formada por la barra invertida (\) y un carcter.
En la siguiente tabla se dan las secuencias de escape ms utilizadas.
Carcter
Secuencia de escape
retorno de
\r
carro
tabulador
\t
horizontal
nueva lnea
\n
barra invertida
\\
Variables booleanas
En el lenguaje C/C++ el valor 0 se toma como falso y el 1 como verdadero. En el lenguaje
Java existe el tipo de dato boolean. Una variable booleana solamente puede guardar uno de
los dos posibles valores: true (verdadero) y false (falso).
boolean encontrado=false;
{...}
encontrado=true;
Variables enteras
Una variable entera consiste en cualquier combinacin de cifras precedidos por el signo
ms (opcional), para los positivos, o el signo menos, para los negativos. Son ejemplos de
nmeros enteros:
12, -36, 0, 4687, -3598
Como ejemplos de declaracin de variable enteras tenemos:
int numero=1205;
int x,y;
long m=30L;
int es la palabra reservada para declarar una variable entera. En el primer caso, el
compilador reserva una porcin de 32 bits de memoria en el que guarda el nmero 1205. Se
accede a dicha porcin de memoria mediante el nombre de la variable, numero. En el
segundo caso, las porciones de memoria cuyos nombres son x e y, guardan cualquier valor
entero si la variable es local o cero si la variable es de instancia o de clase. El uso
de una variaable local antes de ser convenientemente inicializada puede conducir a
consecuencias desastrosas. Por tanto, declarar e inicializar una variable es una prctica
aconsejable.
En la tercera lnea 30 es un nmero de tipo int por defecto, le ponemos el sufijo L en
maysculas o minsculas para indicar que es de tipo long.

Programacin III Introduccin al Java..

Existen como vemos en la tabla varios tipos de nmeros enteros (byte, short, int, long),
y tambin existe una clase denominada BigInteger cuyos objetos pueden guardar un nmero
entero arbitrariamente grande.
Variables en coma flotante
Las variables del tipo float o double (coma flotante) se usan para guardar nmeros en
memoria que tienen parte entera y parte decimal.
double PI=3.14159;
double g=9.7805, c=2.9979e8;
gravedad a nivel del mar, el tercero es la velocidad de la luz en m/s, que es la forma de
escribir 2.9979 108. El carcter punto '.', separa la parte entera de la parte decimal,
en vez del carcter coma ',' que usamos habitualmente en nuestro idioma.
Otras ejemplos son los siguientes
float a=12.5f;
float b=7f;
double c=7.0;
double d=7d;
En la primera lnea 12.5 lleva el sufijo f, ya que por defecto 12.5 es double. En la
segunda lnea 7 es un entero y por tanto 7f es un nmero de tipo float. Y as el resto de
los ejemplos.
Conceptualmente, hay infinitos nmeros de valores entre dos nmeros reales. Ya que los
valores de las variables se guardan en un nmero prefijado de bits, algunos valores no se
pueden representar de forma precisa en memoria. Por tanto, los valores de las variables
en coma flotante en un ordenador solamente se aproximan a los verdaderos nmeros reales
en matemticas. La aproximacin es tanto mejor, cuanto mayor sea el tamao de la memoria
que reservamos para guardarlo. De este hecho, surgen las variables del tipo float y
double. Para nmeros de precisin arbitararia se emplea la clase BigDecimal.
Valores constantes
Cuando se declara una variable de tipo final, se ha de inicializar y cualquier intento de
modificarla en el curso de la ejecucin del programa da lugar a un error en tiempo de
compilacin.
Normalmente, las constantes de un programa se suelen poner en letras maysculas, para
distinguirlas de las que no son constantes. He aqu ejemplos de declaracin de
constantes.
final double PI=3.141592653589793;
final int MAX_DATOS=150;
Las cadenas de caracteres o strings
Adems de los ocho tipos de datos primitivos, las variables en Java pueden ser declaradas
para guardar una instancia de una clase, como veremos en el siguiente captulo (Clases y
objetos).
Las cadenas de caracteres o strings son distintas en Java y en el lenguaje C/C++, en este
ltimo, las cadenas son arrays de caracteres terminados en el carcter
'\0'. Sin
embargo, en Java son objetos de la clase String.
String mensaje="El primer programa";
Empleando strings, el primer programa quedara de la forma equivalente
public class PrimeroApp{
public static void main(String[] args) {
//imprime un mensaje
String mensaje="El primer programa";
System.out.println(mensaje);
}
}
En una cadena se pueden insertar caracteres especiales como el carcter tabulador '\t' o
el de nueva lnea '\n'
String texto="Un string con \t un carcter tabulador y \n un salto de lnea";

Programacin III Introduccin al Java..

Palabras reservadas
En el siguiente cuadro se listan las palabras reservadas, aquellas que emplea el lenguaje
Java, y que el programador no puede utilizar como identificadores. Algunas de estas
palabras le resultarn familiares al programador del lenguaje C/C++. Las palabras
reservadas sealadas con un arterisco (*) no se utilizan.
Abstract boolean
break
byte
byvalue*
Case
cast*
catch
char
class
const*
continue
default
do
double
Else
extends
false
final
finally
Float
for
future*
generic*
goto*
If
implements
import
inner*
instanceof
Int
interface
long
native
new
Null
operator*
outer*
package
private
Protected public
rest*
return
short
Satatic
super
switch
synchronized this
Throw
transient
true
try
var*
Void
volatile
while

Las palabras reservadas se pueden clasificar en las siguientes categoras:


Tipos de datos: boolean, float, double, int, char
Sentencias condicionales: if, else, switch
Sentencias iterativas: for, do, while, continue
Tratamiento de las excepciones: try, catch, finally, throw
Estructura de datos: class, interface, implements, extends
Modificadores y control de acceso: public, private, protected, transient
Otras: super, null, this.

Operadores Aritmticos, Concatenacin de String, Precedencia de


operadores, Conversin de tipo (automtica y promocin)
Operadores unarios
Todos los lenguajes de programacin permiten realizar operaciones entre los tipos de
datos bsicos: suma, resta, producto, cociente, etc., de dos nmeros. Otros lenguajes
como el BASIC y Java permiten "sumar", concatenar cadenas de caracteres.
En la pgina titulada "La primera aplicacin", hemos aprendido a crear un poyecto nuevo,
y la clase que describe la aplicacin mnima que contiene la funcin esttica main.
Luego, le hemos aadido cdigo para dar cierta funcionalidad a la aplicacin, que ha
consistido en imprimir un mensaje en la consola o mostrarlo en la ventana denominada
Execution Log.
Recordaremos que la imagen del disquette significa un proyecto nuevo cuyo nombre aparece
en letra negrita, y cuyos componentes son archivos cdigo fuente en el que se guardan las
clases.
Los operadores aritmticos
Java tiene cinco operadores aritmticos
Operador
+
*
/
%

cuyo significado se muestra en la tabla adjunta


Nombre
Ejemplo
Suma
3+4
Diferencia
3-4
Producto
3*4
Cociente
20/7
Mdulo
20%7

Programacin III Introduccin al Java..

El cociente entre dos enteros da como resultado un entero. Por ejemplo, al dividir 20
entre 7 nos da como resultado 2.
El operador mdulo da como resultado el resto de la divisin entera. Por ejemplo 20%7 da
como resultado 6 que es el resto de la divisin entre 20 y 7.
El operador mdulo tambin se puede emplear con nmeros reales. Por ejemplo, el cociente
entre 7.5 y 3.0 es 2.5 y el resto es cero, es decir, 7.5=3.0 x 2.5+ 0. El operador
mdulo, funciona de la siguiente forma 7.5=3.0 x 2+1.5, calcula la diferencia entre el
dividendo (7.5) y el producto del divisor (3.0) por la parte entera (2) del cociente,
devolviendo 1.5. As pues, la operacin 7.5%3.0 da como resultado 1.5.
El operador asignacin
Nos habremos dado cuenta que el operador ms importante y ms frecuentemente usado es el
operador asignacin =, que hemos empleado para la inicializacin de las variables. As,
int numero;
numero=20;
la primera sentencia declara una variable entera de tipo int y le da un nombre (numero).
La segunda sentencia usa el operador asignacin para inicializar la variable con el
nmero 20.
Consideremos ahora, la siguiente sentencia.
a=b;
que asigna a a el valor de b. A la izquierda siempre tendremos una variable tal como a,
que recibe valores, a la derecha otra variable b, o expresin que tiene un valor. Por
tanto, tienen sentido las expresiones
a=1234;
double area=calculaArea(radio);
superficie=ancho*alto;
Sin embargo, no tienen sentido las expresiones
1234=a;
calculaArea(radio)=area;
Las asignaciones mltiples son tambin posibles. Por ejemplo, es vlida la sentencia
c=a=b;
//equivalente a c=(a=b);
la cual puede ser empleada para inicializar en la misma lnea varias variables
c=a=b=321;
//asigna 321 a a, b y c
El operador asignacin se puede combinar con los operadores aritmticos
Expresin
Significado
x+=y
x=x+y
x-=y
x=x-y
x*=y
x=x*y
x/=y
x=x/y
As, la sentencia
x=x+23;
evala la expresin x+23, que es asignada de nuevo a x. El compilador lee primero el
contenido de la porcin de memoria nombrada x, realiza la suma, y guarda el resultado en
la misma porcin de memoria. Se puede escribir la sentencia anterior de una forma
equivalente ms simple
x+=23;
Concatenacin de strings
En Java se usa el operador + para concatenar cadenas de carcateres o strings. Veremos en
el siguiente apartado una sentencia como la siguiente:
System.out.println("la temperatura centgrada es "+tC);
El operador + cuando se utiliza con strings y otros objetos, crea un solo string que
contiene la concatenacin de todos sus operandos. Si alguno de los operandos no es una
cadena, se convierte automticamente en una cadena. Por ejemplo, en la sentencia anterior
el nmero del tipo double que guarda la variable tC se convierte en un string que se
aade al string "la temperatura centgrada es ".
Como veremos ms adelante, un objeto se convierte automticamente en un string si su
clase redefine la funcin miembro toString de la clase base Object.
Como vemos en el listado, para mostrar un resultado de una operacin, por ejemplo, la
suma de dos nmeros enteros, escribimos

Programacin III Introduccin al Java.. 10


iSuma=ia+ib;
System.out.println("El resultado de la suma es "+iSuma);
Concatena una cadena de caracteres con un tipo bsico de
automticamente en un string.
El operador += tambin funciona con cadenas.
String nombre="Juan ";
nombre+="Garca";
System.out.println(nombre);

dato,

que

convierte

public class OperadorAp {


public static void main(String[] args) {
System.out.println("Operaciones con enteros");
int ia=7, ib=3;
int iSuma, iResto;
iSuma=ia+ib;
System.out.println("El resultado de la suma es "+iSuma);
int iProducto=ia*ib;
System.out.println("El resultado del producto es "+iProducto);
System.out.println("El resultado del cociente es "+(ia/ib));
iResto=ia%ib;
System.out.println("El resto de la divisin entera es "+iResto);
System.out.println("**********************************");
System.out.println("Operaciones con nmeros decimales");
double da=7.5, db=3.0;
double dSuma=da+db;
System.out.println("El resultado de la suma es "+dSuma);
double dProducto=da*db;
System.out.println("El resultado del producto es "+dProducto);
double dCociente=da/db;
System.out.println("El resultado del cociente es "+dCociente);
double dResto=da%db;
System.out.println("El resto de la divisin es "+dResto);
}
}
La precedencia de operadores
El lector conocer que los operadores aritmticos tienen distinta precedencia, as la
expresin
a+b*c
es equivalente a
a+(b*c)
ya que el producto y el cociente tienen mayor precedencia que la suma o la resta. Por
tanto, en la segunda expresin el parntesis no es necesario. Sin embargo, si queremos
que se efecte antes la suma que la multiplicacin tenemos de emplear los parntesis
(a+b)*c
Para realizar la operacin
escribiremos
a/(b*c);
o bien,
a/b/c;
En la mayora de los casos, la precedencia de las operaciones es evidente, sin embargo,
en otros que no lo son tanto, se aconseja emplear parntesis. Como ejemplo, estudiemos un
programa que nos permite convertir una temperatura en grados Fahrenheit en su equivalente
en la escala Celsius. La frmula de conversin es

cuya codificacin es
tC=(tF-32)*5/9;

Programacin III Introduccin al Java.. 11


Las operaciones se realizan como suponemos, ya que si primero se realizase el cociente
5/9, el resultado de la divisin entera sera cero, y el producto por el resultado de
evaluar el parntesis sera tambin cero. Si tenemos dudas sobre la precedencia de
operadores podemos escribir
tC=((tF-32)*5)/9;
public class PrecedeApp {
public static void main(String[] args) {
int tF=80;
System.out.println("la temperatura Fahrenheit es "+tF);
int tC=(tF-32)*5/9;
System.out.println("la temperatura centgrada es "+tC);
}
}
Conversin de tipo automtica y promocin (casting)
Cuando se realiza una operacin, si un operando es entero (int) y el otro es de coma
flotante (double) el resultado es en coma flotante (double).
int a=5;
double b=3.2;
double suma=a+b;
Cuando se declaran dos variables una de tipo int y otra de tipo double.
int entero;
double real=3.20567;
qu ocurrir cuando asignamos a la variable entero el nmero guardado en la variable
real?. Como hemos visto se trata de dos tipos de variables distintos cuyo tamao en
memoria es de 32 y 64 bits respectivamente. Por tanto, la sentencia
entero=real;
convierte el nmero real en un nmero entero eliminando los decimales. La variable entero
guardar el nmero 3.
Se ha de tener cuidado, ya que la conversin de un tipo de dato en otro es una fuente
frecuente de error entre los programadores principiantes. Ahora bien, supongamos que
deseamos calcular la divisin 7/3, como hemos visto, el resultado de la divisin entera
es 2, an en el caso de que tratemos de guardar el resultado en una variable del tipo
double, como lo prueba la siguiente porcin de cdigo.
int ia=7;
int ib=3;
double dc=ia/ib;
Si queremos obtener una aproximacin decimal del nmero 7/3, hemos de promocionar el
entero ia a un nmero en coma flotante, mediante un procedimiento denominado promocin o
casting.
int ia=7;
int ib=3;
double dc=(double)ia/ib;
Como aplicacin, consideremos el clculo del valor medio de dos o ms nmeros enteros
int edad1=10;
int edad2=15;
double media=(double)(edad1+edad2)/2;
El valor medio de 10 y 15 es 12.5, sin la promocin se obtendra el valor errneo 12.
Imaginemos ahora, una funcin que devuelve un entero int y queremos guardarlo en una
variable de tipo float. Escribiremos
float resultado=(float)retornaInt();
Existen tambin conversiones implcitas realizadas por el compilador, por ejemplo cuando
pasamos un entero int a una funcin cuyo nico parmetro es de tipo long.
Los operadores unarios
Los operadores unarios son:
++ Incremento
-- Decremento
actan sobre un nico operando. Se trata de uno de los aspecto ms confusos para el
programador, ya que el resultado de la operacin depende de que el operador est a la
derecha i++ o a la izquierda ++i.

Programacin III Introduccin al Java.. 12


Conoceremos, primero el significado de estos dos operadores a partir de las sentencias
equivalentes:
i=i+1;
//aadir 1 a i
i++;
Del mismo modo, lo son
i=i-1;
//restar 1 a i
i--;
Examinemos ahora, la posicin del operador respecto del operando. Consideremos en primer
lugar que el operador unario ++ est a la derecha del operando. La sentencia
j=i++;
asigna a j, el valor que tena i. Por ejemplo, si i vala 3, despus de ejecutar la
sentencia, j toma el valor de 3 e i el valor de 4. Lo que es equivalente a las dos
sentencias
j=i;
i++;
Un resultado distinto se obtiene si el operador ++ est a la izquierda del operando
j=++i;
asigna a j el valor incrementado de i. Por ejemplo, si i vala 3, despus de ejecutar la
sentencia j e i toman el valor de 4. Lo que es equivalente a las dos sentencias
++i;
j=i;

public class UnarioApp {


public static void main(String[] args) {
int i=8;
int a, b, c;
System.out.println("\tantes\tdurante\tdespus");
i=8; a=i; b=i++; c=i;
System.out.println("i++\t"+a+'\t'+b+'\t'+c);
i=8; a=i; b=i--; c=i;
System.out.println("i--\t"+a+'\t'+b+'\t'+c);
i=8; a=i; b=++i; c=i;
System.out.println("++i\t"+a+'\t'+b+'\t'+c);
i=8; a=i; b=--i; c=i;
System.out.println("--i\t"+a+'\t'+b+'\t'+c);
}
}
La salida del programa es, la siguiente
antes
durante
despus
i++
8
8
9
i-8
8
7
++i
8
9
9
--i
8
7
7
La primera columna (antes) muestra el valor inicial de i, la segunda columna (durante)
muestra el valor de la expresin, y la ltima columna (despus) muestra el valor final de
i, despus de evaluarse la expresin.
Se deber de tener siempre el cuidado de inicializar la variable, antes de utilizar los
operadores unarios con dicha variable.

Operadores Relacinales y Lgicos


Los operadores relacionales
Los operadores relacionales son smbolos que se usan para comparar dos valores. Si el
resultado de la comparacin es correcto la expresin considerada es verdadera, en caso
contrario es falsa. Por ejemplo, 8>4 (ocho mayor que cuatro) es verdadera, se representa
por el valor true del tipo bsico boolean, en cambio, 8<4 (ocho menor que cuatro) es
falsa, false. En la primera columna de la tabla, se dan los smbolos de los operadores

Programacin III Introduccin al Java.. 13


relacionales, el la segunda, el nombre de dichos operadores, y a continuacin su
significado mediante un ejemplo.
Operador

nombre

ejemplo

significado

<

menor que

a<b

a es menor que b

>

mayor que

a>b

a es mayor que b

==

igual a

a==b

a es igual a b

!=

no igual a

a!=b

a no es igual a b

<=

menor que o igual a

a<=5

a es menor que o igual a b

>=

mayor que o igual a

a>=b

a es menor que o igual a b

Se debe tener especial cuidado en no confundir el operador asignacin con el operador


relacional igual a. Las asignaciones se realizan con el smbolo =, las comparaciones con
==.
En el programa RelacionApp, se compara la variable i que guarda un 8, con un conjunto de
valores, el resultado de la comparacin es verdadero (true), o falso (false).
public class RelacionApp {
public static void main(String[] args) {
int x=8;
int y=5;
boolean compara=(x<y);
System.out.println("x<y es "+compara);
compara=(x>y);
System.out.println("x>y es "+compara);
compara=(x==y);
System.out.println("x==y es "+compara);
compara=(x!=y);
System.out.println("x!=y es "+compara);
compara=(x<=y);
System.out.println("x<=y es "+compara);
compara=(x>=y);
System.out.println("x>=y es "+compara);
}
}
Los operadores lgicos
Los operadores lgicos son:
&& AND (el resultado es verdadero si ambas expresiones son verdaderas)
|| OR (el resultado es verdadero si alguna expresin es verdadera)
! NOT (el resultado invierte la condicin de la expresin)
AND y OR trabajan con dos operandos y retornan un valor lgico basadas en las denominadas
tablas de verdad. El operador NOT acta sobre un operando. Estas tablas de verdad son
conocidas y usadas en el contexto de la vida diaria, por ejemplo: "si hace sol Y tengo
tiempo, ir a la playa", "si NO hace sol, me quedar en casa", "si llueve O hace viento,
ir al cine". Las tablas de verdad de los operadores AND, OR y NOT se muestran en las
tablas siguientes
El operador lgico AND
x

resultado

true

true

true

true

false false

false true

false

false false false


El operador lgico OR

Programacin III Introduccin al Java.. 14


x

resultado

true

true

true

true

false true

false true

true

false false false

El operador lgico NOT


x

resultado

true

False

false True
Los operadores AND y OR combinan expresiones relacionales cuyo resultado viene dado por
la ltima columna de sus tablas de verdad. Por ejemplo:
(a<b) && (b<c)
es verdadero (true), si ambas son verdaderas. Si alguna o ambas son falsas el resultado
es falso (false). En cambio, la expresin
(a<b) ||(b<c)
es verdadera si una de las dos comparaciones lo es. Si ambas, son falsas, el resultado es
falso.
La expresin " NO a es menor que b"
!(a<b)
es falsa si (a<b) es verdadero, y es verdadera si la comparacin es falsa. Por tanto, el
operador NOT actuando sobre (a<b) es equivalente a
(a>=b)
La expresin "NO a es igual a b"
!(a==b)
es verdadera si a es distinto de b, y es falsa si a es igual a b. Esta expresin es
equivalente a
(a!=b)
Ejemplo:
package relacion;
public class RelacionApp {
public static void main(String[] args) {
int x=8;
int y=5;
boolean compara=(xy);
System.out.println("x>y es "+compara);
compara=(x==y);
System.out.println("x==y es "+compara);
compara=(x!=y);
System.out.println("x!=y es "+compara);
compara=(x<=y);
System.out.println("x<=y es "+compara);
compara=(x>=y);
System.out.println("x>=y es "+compara);
try {
//espera la pulsacin de una tecla y luego RETORNO
System.in.read();
}catch (Exception e) { }
}
}

Programacin III Introduccin al Java.. 15


Prioridad y Orden de evaluacin
Operador
( ) [ ] .
++ -new (cast)
* %
+ < > <=
>=
== =
&&

= *= /= %=
+= -=

Accin
Parntesis, corchetes y el punto
Cambio signo, Negacin, incremento, decremento
Asignacin de memoria, cambio de tipo
Divisin, multiplicacin, resto de una divisin
Suma y resta
Menor que, mayor que, menor o igual, mayor o igual
Igual a, diferente de
Y lgico
O lgico
Igual, * igual, Division igual, resto igual, suma igual resta
igual

If, If.. else, Switch


Del mismo modo que en la vida diaria, en un programa es necesario tomar decisiones
basadas en ciertos hechos y actuar en consecuencia. El lenguaje Java tiene una sentencia
bsica denominada if (si condicional) que realiza un test y permite responder de acuerdo
al resultado.
La sentencia if
La sentencia if, acta como cabra esperar. Si la condicin es verdadera, la sentencia se
ejecuta, de otro modo, se salta dicha sentencia, continuando la ejecucin del programa
con otras sentencias a continuacin de sta. La forma general de la sentencia if es:
if (condicin)
sentencia;

Si el resultado del test es verdadero (true) se ejecuta la sentencia que sigue a


continuacin de if, en caso contrario, falso (false), se salta dicha sentencia, tal como
se indica en la figura. La sentencia puede consistir a su vez, en un conjunto de
sentencias agrupadas en un bloque.
if (condicin){
sentencia1;
sentencia2;
}
En el siguiente ejemplo, si el nmero del boleto que hemos adquirido coincide con el
nmero aparecido en el sorteo, nos dicen que hemos obtenido un premio.
if(numeroBoleto==numeroSorteo)
System.out.println("has obtenido un premio");
La sentencia if...else

Programacin III Introduccin al Java.. 16


La sentencia if...else completa la sentencia if, para realizar una accin alternativa
if (condicin)
sentencia1;
else
sentencia2;

Las dos primeras lneas indican que si la condicin es verdadera se ejecuta la sentencia
1. La palabra clave else, significa que si la condicin no es verdadera se ejecuta la
sentencia 2, tal como se ve en la figura..
Dado que las sentencias pueden ser simples o compuestas la forma general de if...else es
if (condicin){
sentencia1;
sentencia2;
}else{
sentencia3
sentencia4;
sentencia5;
}
Existe una forma abreviada de escribir una sentencia condicional if...else como la
siguiente:
if (numeroBoleto==numeroSoreteo)
premio=1000;
else
premio=0;
en una sola lnea
premio=(numeroBoleto==numeroSoreteo) ? 1000 : 0;
Un ejemplo significativo es el siguiente: el signo de un nmero elevado a una potencia
par es positivo, y es negativo cuando est elevado a una potencia impar.
int signo=(exponente%2==0)?1:-1;
La condicin entre parntesis es la siguiente: un nmero es par, cuando el resto de la
divisin entera de dicho nmero entre dos vale cero.
La sentencia switch
Como podemos ver en la figura del apartado anterior, la sentencia if...else tiene dos
ramas, el programa va por una u otra rama dependiendo del valor verdadero o falso de la
expresin evaluada. A veces, es necesario, elegir entre varias alternativas, como se
muestra en la siguiente figura

Programacin III Introduccin al Java.. 17

Por ejemplo, considrese las siguientes series de sentencias if...else


if(expresion==valor1)
sentencia1;
else if(expresion==valor2)
sentencia2;
else if(expresion==valor3)
sentencia3;
else
sentencia4;
El cdigo resultante puede ser difcil de seguir y confuso incluso para el programador
avanzado. El lenguaje Java proporciona una solucin elegante a este problema mediante la
sentencia condicional switch para agrupar a un conjunto de sentencias if...else.

switch(expresion){
case valor1:
sentencia1;
break;
//sale de switch
case valor2:
sentencia2;
break;
//sale switch
case valor3:
sentencia3;
break;
//sale de switch
default:
sentencia4;
}
En la sentencia switch, se compara el valor de una variable o el resultado de evaluar una
expresin, con un conjunto de nmeros enteros valor1, valor2, valor3, .. o con un
conjunto de caracteres, cuando coinciden se ejecuta el bloque de sentencias que estn
asociadas con dicho nmero o carcter constante. Dicho bloque de sentencias no est entre
llaves sino que empieza en la palabra reservada case y termina en su asociado break. Si
el compilador no encuentra coincidencia, se ejecuta la sentencia default, si es que est
presente en el cdigo.
Veamos ahora un ejemplo sencillo: dado el nmero que identifica al mes (del 1 al 12)
imprimir el nombre del mes.
public class SwitchApp1 {
public static void main(String[] args) {
int mes=3;
switch (mes) {
case 1: System.out.println("Enero"); break;
case 2: System.out.println("Febrero"); break;
case 3: System.out.println("Marzo"); break;
case 4: System.out.println("Abril"); break;
case 5: System.out.println("Mayo"); break;

Programacin III Introduccin al Java.. 18


case 6:
case 7:
case 8:
case 9:
case 10:
case 11:
case 12:
default:

System.out.println("Junio"); break;
System.out.println("Julio"); break;
System.out.println("Agosto"); break;
System.out.println("Septiembre"); break;
System.out.println("Octubre"); break;
System.out.println("Noviembre"); break;
System.out.println("Diciembre"); break;
System.out.println("Este mes no existe"); break;

}
}
}
Ahora un ejemplo ms complicado, escribir un programa que calcule el nmero de das de un
mes determinado cuando se da el ao.
Anotar primero, los meses que tienen 31 das y los que tienen 30 das. El mes de Febrero
(2 mes) es el ms complicado ya que tiene 28 das excepto en los aos que son bisiestos
que tiene 29. Son bisiestos los aos mltiplos de cuatro, que no sean mltiplos de 100,
pero si son bisiestos los mltiplos de 400.
public class SwitchApp2 {
public static void main(String[] args) {
int mes=2;
int ao=1992;
int numDias=30;
switch (mes) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
numDias = 31;
break;
case 4:
case 6:
case 9:
case 11:
numDias = 30;
break;
case 2:
if ( ((ao % 4 == 0) && !(ao % 100 == 0)) || (ao % 400 == 0) )
numDias = 29;
else
numDias = 28;
break;
default:
System.out.println("Este mes no existe");
break;
}
System.out.println("El mes "+mes+" del ao "+ao+" tiene "+numDias+" das");
}
}

For, While, Do. While, Break, Continue


Tan importantes como las sentencias condiciones son las sentencias iterativas o
repetitivas. Normalmente, las sentencias de un programa son ejecutadas en el orden en el
que aparecen. Cada sentencia es ejecutada una y solamente una vez. El lenguaje Java, como
la mayora de los lenguajes, proporciona sentencias que permiten realizar una tarea una y
otra vez hasta que se cumpla una determinada condicin, dicha tarea viene definida por un

Programacin III Introduccin al Java.. 19


conjunto de sentencias agrupadas en un bloque. Las sentencias iterativas son for, while
y do...while
La sentencia for
Esta sentencia se encuentra en la mayora de los lenguajes de programacin. El bucle for
se emplear cuando conocemos el nmero de veces que se ejecutar una sentencia o un
bloque de sentencias, tal como se indica en la figura. La forma general que adopta la
sentencia for es
for(inicializacin; condicin; incremento)
sentencia;

El primer trmino inicializacin, se usa para inicializar una variable ndice, que
controla el nmero de veces que se ejecutar el bucle. La condicin representa la
condicin que ha de ser satisfecha para que el bucle contine su ejecucin. El incremento
representa la cantidad que se incrementa la variable ndice en cada repeticin.
Ejemplo: Escribir un programa que imprima los primeros 10 primeros nmeros enteros
empezando por el cero
for (int i = 0; i < 10; i++) {
System.out.println(i);
}
El resultado ser: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
La variable ndice i se declara y se inicializa en el trmino inicializacin, la
condicin se expresa de modo que i se debe mantener estrictamente menor que 10; la
variable i se incrementa una unidad en cada repeticin del bucle. La variable i es local
al bucle, por lo que deja de existir una vez que se sale del bucle.
Ejemplo: Escribir un programa que imprima los nmeros pares positivos menores o iguales
que 20
for (int i=2; i <=20; i += 2) {
System.out.println(i);
}
Ejemplo: Escribir un programa que imprima los nmeros pares positivos menores o iguales
que 20 en orden decreciente
for (int i=20; i >= 2; i -= 2) {
System.out.println(i);
}
Ejemplo: Escribir un programa que calcule el factorial de un nmero empleando la
sentencia iterativa for. Guardar el resultado en un nmero entero de tipo long .
Definicin: el factorial de un nmero n es el resultado del producto 1*2*3* .... *(n1)*n.
public class FactorialApp {
public static void main(String[] args) {
int numero=4;
long resultado=1;
for(int i=1; i<=numero; i++){
resultado*=i;
}
System.out.println("El factorial es "+resultado);

Programacin III Introduccin al Java.. 20


}
}
La sentencia while
A la palabra reservada while le sigue una condicin encerrada entre parntesis. El bloque
de sentencias que le siguen se ejecuta siempre que la condicin sea verdadera tal como se
ve en la figura. La forma general que adopta la sentencia while es:
while (condicin)
sentencia;

Ejemplo: Escribir un programa que imprima los primeros 10 primeros nmeros enteros
empezando por el cero, empleando la sentencia iterativa while.
int i=0;
while (i<10) {
System.out.println(i);
i++;
}
El valor inicial de i es cero, se comprueba la condicin (i<10), la cual resulta
verdadera. Dentro del bucle, se imprime i, y se incrementa la variable contador i, en una
unidad. Cuando i vale 10, la condicin (i<10) resulta falsa y el bucle ya no se ejecuta.
Si el valor inicial de i fuese 10, no se ejecutara el bucle. Por tanto, el bucle while
no se ejecuta si la condicin es falsa.
Ejemplo: escribir un programa que calcule el factorial de un nmero empleando la
sentencia iterativa while
public class FactorialApp1 {
public static void main(String[] args) {
int numero=4;
long resultado=1;
while(numero>0){
resultado*=numero;
numero--;
}
System.out.println("El factorial es "+resultado);
}
}
La sentencia do...while

Como hemos podido apreciar las sentencias for y while la condicin est al
principio del bucle, sin embargo, do...while la condicin est al final
del bucle, por lo que el bucle se ejecuta por lo menos una vez tal como se
ve en la figura. do marca el comienzo del bucle y while el final del
mismo. La forma general es:
do{
sentencia;
}while(condicin);

Programacin III Introduccin al Java.. 21

Ejemplo: Escribir un programa que imprima los primeros 10 primeros nmeros enteros
empezando por el cero, empleando la sentencia iterativa do..while.
int i=0;
do{
System.out.println(i);
i++;
}while(i < 10);
El bucle do...while, se usa menos que el bucle while, ya que habitualmente evaluamos la
expresin que controla el bucle al comienzo, no al final.
La sentencia break
A veces es necesario interrumpir la ejecucin de un bucle for, while, o do...while.
for(int i = 0; i < 10; i++){
if (i == 8)
break;
System.out.println(i);
}
Consideremos de nuevo el ejemplo del bucle for, que imprime los 10 primeros nmeros
enteros, se interrumpe la ejecucin del bucle cuando se cumple la condicin de que la
variable contador i valga 8. El cdigo se leer: "salir del bucle cuando la variable
contador i, sea igual a 8".
Como podemos apreciar, la ejecucin del bucle finaliza prematuramente. Quizs el lector
pueda pensar que esto no es de gran utilidad pues, el cdigo anterior es equivalente a
for(int i = 0; i <=8; i++)
System.out.println(i);
Sin embargo, podemos salir fuera del bucle prematuramente si se cumple alguna condicin
de finalizacin.
while(true){
if (condicionFinal)
break;
//...otras sentencias
}
Como podemos apreciar en esta porcin de cdigo, la expresin en el bucle while es
siempre verdadera, por tanto, tiene que haber algn mecanismo que nos permita salir del
bucle. Si la condicion de finalizacin es verdadera, es decir la variable condicionFinal
del tipo boolean toma el valor true, se sale del bucle, en caso contrario se continua el
procesmiento de los datos.
La sentencia continue
La sentencia continue, fuerza al bucle a comenzar la siguiente iteracin desde el
principio. En la siguiente porcin de cdigo, se imprimen todos los nmeros del 0 al 9
excepto el nmero 8.
for(int i = 0; i < 10; i++){
if (i == 8)
continue;
System.out.println(i);
}
Etiquetas

Programacin III Introduccin al Java.. 22


Tanto break como continue pueden tener una etiqueta opcional que indica a Java hacia
donde dirigirse cuando se cumple una determinada condicin.
salida:
for(int i=0; i<20; i++){
while(j<70){
if(i*j==500)
break salida;
//...
}
//...
}
La etiqueta en este ejemplo se denomina salida, y se aade antes de la parte inicial del
ciclo. La etiqueta debe terminar con el carcter dos puntos :. Si no disponemos de
etiqueta, al cumplirse la condicin i*j==500, se saldra del bucle interno while, pero el
proceso de clculo continuara en el bucle externo for.
Ejemplo: los nmeros primos
Escribir un programa que calcule los nmeros primos comprendidos entre 3 y 100.
Los nmeros primos tienen la siguiente caracterstica: un nmero primo es solamente
divisible por s mismo y por la unidad, por tanto, un nmero primo no puede ser par
excepto el 2. Para saber si un nmero impar es primo, dividimos dicho nmero por todos
los nmeros impares comprendidos entre 3 y la mitad de dicho nmero. Por ejemplo, para
saber si 13 es un nmero primo basta dividirlo por 3, y 5. Para saber si 25 es nmero
primo se divide entre 3, 5, 7, 9, y 11. Si el resto de la divisin (operacin mdulo %)
es cero, el nmero no es primo.
public class PrimosApp {
public static void main(String[] args) {
boolean bPrimo;
System.out.println("Nmeros primos comprendidos entre 3 y 100");
for(int numero=3; numero<100; numero+=2){
bPrimo=true;
for(int i=3; i<numero/2; i+=2){
if(numero%i==0){
bPrimo=false;
break;
}
}
if(bPrimo){
System.out.print(numero+" - ");
}
}
}
}
En primer lugar, hacemos un bucle for para examinar los nmeros impares comprendidos
entre 3 y 100.
Hacemos la suposicin de que numero es primo, es decir, de que la variable de control
bPrimo toma el valor true. Para confirmarlo, se halla el resto de la divisin entera
entre numero, y los nmeros i impares comprendidos entre 3 y numero/2. (Se recordar que
todo nmero es divisible por la unidad). Si el nmero numero es divisible por algn
nmero i (el resto de la divisin entera numero%i es cero), entonces el nmero numero no
es primo, se abandona el bucle (break) con la variable de control bPrimo tomando el valor
false. En el caso de que numero sea un nmero primo, se completa el bucle interno,
tomando la variable de control bPrimo el valor inicial true.
Por ltimo, si el nmero es primo, bPrimo es true, se imprime en la ventana, uno a
continuacin del otro separados por un guin.
En este programa podemos observar la diferencia entre print y println. El sufijo ln en la
segunda funcin indica que se imprime el argumento y a continuacin se pasa a la lnea
siguiente.
Entradas y Salidas en Java

Programacin III Introduccin al Java.. 23


La entrada y salida en Java se lee y se escribe en flujos (stream)
bsicas de entrada y salida son el teclado y la pantalla.

donde las fuentes

Un flujo: es una corriente de datos entre una fuente y un destino


Salida:
En Java el objeto System.out esta asociado con el flujo de salida que dirige los datos a
la consola o pantalla, y tiene los siguientes mtodos:
print( )
println(
)
flush( )

Transfiere una cadena al buffer de la pantalla para


visualizarlo cuando termine el programa.
Transfiere una cadena al buffer de la pantalla con el
carcter \n para visualizarlo cuando termine el programa.
La cadena que se encuentra en el buffer de salida de la
pantalla se escribe en ese momento y no espera a que
termine el programa

Con estos mtodos se puede escribir cualquier cadena o dato de los tipos bsicos.
System.out.println(El valor es + una virtud);
Con el operador + se concatenan las dos cadenas y la cadena resultante se enva al buffer
de la pantalla para se visualizada cuando el programa termine. Tambin podemos enviar
constantes o variables de los tipos bsicos, el mtodo se encarga de convertir a cadena
esos datos, por ejemplo:
int p = 60;
System.out.print(Valor de i es: + i);
El contenido de la variable i se convierte a cadena y se concatena con la constante de
cadena.
Java utiliza secuencias de escape
tales como \n (salto de lnea) y \t (tabulador) con
los mtodos print y println.
Entrada:
En Java el objeto System.in esta asociado al flujo estndar de entrada (teclado) el
elemento bsico de este flujo son caracteres y no cadenas como ocurre con out. El mtodo
read( ) retorna el carcter actual en el buffer de entrada:
char c;
c = (char) System.in.read( );
Esto resulta impractico cuando es una lnea de caracteres lo que queremos leer desde
teclado, para ello se utiliza la clase InputStreamReader, de la que se crea un objeto
inicializado con System.in:
InputStreamReader en = new InputStreamReader(System.in);
Una vez creado el
en este se utiliza a su vez como argumento para inicializar otro
objeto de la clase BufferedReader, el cual
permite la entrada de lneas de caracteres
desde el teclado con el mtodo readLine( ):
BufferReader entrada = new BufferedReader (en);
String cd;
System.out.print(Introdusca una cadena por el teclado: );
System.out.flush( );
cd = entrada.readLine( );
el mtodo readLine( ) retorna un objeto cadena con la linea de caracteres leida desde el
teclado; la referencia a ese objeto se asigna a cd, que es una variable de tipo String.
readLine( ) lanza la excepcin IOException. Para evitar error en tiempo de compilacin,
en main( ) se aade throws IOException.

Programacin III Introduccin al Java.. 24


Las lneas de cdigo:
InputStreamReader en = new InputStreamReader(System.in);
BufferReader entrada = new BufferedReader (en);
Se simplifican en una sola sentencia, no teniendo que crear el objeto en, es la forma
usual en que aparece en los programas.
BufferedReader entrada = new BufferedReader(new InputStreamReader(System.in));
a) Para capturar una cadena de caracteres se hara el siguiente programa:
Class ImpNombre {
Public static void main( String[ ] arg ) throws IOException {
BufferedReader entrada = new BufferedReader(new InputStreamReader(System.in));
String nombre;
System.out.print(Introdusca su nombre por el teclado: );
System.out.flush( );
nombre = entrada.readLine( );
System.out.println(Hola: + nombre);
}
}
b) Para capturar valores enteros se hara el siguiente programa:
Class SumaEnteros {
Public static void main( String[ ] arg ) throws IOException {
BufferedReader entrada = new BufferedReader(new InputStreamReader(System.in));
int dato1, dato2,suma;
System.out.print(Introdusca un entero por el teclado: );
System.out.flush( );
dato1 = Integer.parseInt(entrada.readLine( ));
System.out.print(Introdusca otro entero por el teclado: );
System.out.flush( );
dato2 = Integer.parseInt(entrada.readLine( ));
suma = dato1 + dato2 ;
System.out.println(Suma =

+ suma );

}
}
Con Integer.parseInt( ) se convierte una cadena a un int.
c) Para capturar valores float se hara el siguiente programa:
Class AreaTriangulo {
Public static void main( String[ ] arg ) throws IOException {
BufferedReader entrada = new BufferedReader(new InputStreamReader(System.in));
Float dato;
float base, altura;
System.out.print(Introdusca la base por el teclado: );
System.out.flush( );
dato = Float.ValueOf(entrada.readLine( ));
base = dato.floatValue( );
System.out.print(Introdusca la altura por el teclado: );
System.out.flush( );
dato = Float.ValueOf(entrada.readLine( ));
altura = dato.floatValue( );
System.out.println(Area =

+ base * altura/2 );

Programacin III Introduccin al Java.. 25


}
}
d) Para capturar valores double se hara el siguiente programa:
Class AreaTriangulo {
Public static void main( String[ ] arg ) throws IOException {
BufferedReader entrada = new BufferedReader(new InputStreamReader(System.in));
Double dato;
double base, altura;
System.out.print(Introdusca la base por el teclado: );
System.out.flush( );
dato = Double.ValueOf(entrada.readLine( ));
base = dato.doubleValue( );
System.out.print(Introdusca la altura por el teclado: );
System.out.flush( );
dato = Double.ValueOf(entrada.readLine( ));
altura = dato.doubleValue( );
System.out.println(Area =

+ base * altura/2 );

}
}
Nota:
double d;
float f;
otra forma de realizar la captura de informacin de manera eficiente seria usando lo
siguiente:
d = Double.parseDouble(entrada.readLine( )); // para el caso de un double.
f = Float.parseFloat(entrada.readLine( )); // para el caso de un float.
Estas dos formas simplifican la forma en que se efectuaron las entradas en los ejemplos
anteriores
En la librera java.util disponemos de otra forma de realizar la entrada de datos, la
clase Sccaner proporciona mtodos para leer datos de la entrada estndar (teclado),
referenciada por el mtodo System.in, estos mtodos son:
Scanner(System.in): construye un lector para obtener valore por la entrada estndar
ejemplo:
Sccaner leer = new Sccaner(System.in)
Asociados al objeto leer tenemos los siguientes metodos:
next( ): retorna una cadena, el fin de la cadena se delimita por un espacio en blanco o
un Enter, ejemplo:
String dato = leer.next();
nextLine( ): retorna una cadena, pero a diferencia del anterior, lee del teclado los
caracteres introducidos, inclusive los espacios en blanco, hasta encontrar el Enter.
Ejemplo:
String dato = leer.nextLine( ):

Programacin III Introduccin al Java.. 26


Tambin existen mtodos de lectura para cada uno de los tipos de datos como son:
Metodo
Accin
nextBoolean( Lee un elemento de tipo lgico
)
(true o false).
nextInt( )
Lee un valor entero.
nextFloat( ) Lee un valor real en simple
precisin.
nextDouble(
Lee un valor real en doble
)
precisin.
Si el tipo de dato introducido no es del tipo solicitado no se acepta la entrada y se
lanza una excepcin, por ejemplo:
Leer.nextBolean ( );
Salida con formato
Mediante el mtodo printf de la clase java.util podemos especificar cmo va a ser
salida de la siguiente manera:

la

System.out.printf(Formato, lista variables o valores);


En donde en el formato
se especifica cmo ser la salida, es una cadena de caracteres
formada por caracteres ordinarios, especificaciones de formato y secuencias de escape, el
formato se lee de izquierda a derecha.
Lista de variables: representa
datos a escribir, cada variable debe tener su
correspondiente especificacin de formato y en el mismo orden.
La siguiente tabla muestra los formatos utilizados y ejemplos:
Carcter
c

Descripcin
Carcter

Enteros

F o f

Reales

Cadenas

Ejemplo
printf(%c, A);
printf(%c
%d,A,(int)A);
printf(%05,45);
printf(%5d,45)
printf(%.2f,45.00);
printf(%.0f,45.00);
printf(%8.2f,145.30);
printf(%8.2f,45.00)
printf(%8s,abc);
printf(%8s,abcde);
printf(%-8s,abc);
printf(%-8s,abcde);

Salida
A
A

65

00045
45
45.00
45
145.30
45.00
abc
abcde
abc
abcde

Programacin III Introduccin al Java.. 27


Nota: % indica una especificacin de formato, el signo despus del % indica que el
dato se alineara a la izquierda del campo de impresin de no aparecer a la derecha (ver
ejemplos en la tabla), en el caso de los valores numricos si se indica %05, es que se
usara un campo de impresin de 5 caracteres en caso de no haber el carcter se imprimir
un cero, un formato como este %8.2 indica que se usara un campo de impresin de 8
caracteres de los cuales 2 se usaran para la parte decimal, el \n indica un salto de
lnea.
Mtodos (Funciones):
Bloque de cdigo que tiene un nombre, un tipo y una lista de argumentos o parmetros,
esto es lo que en otros lenguajes de programacin recibe el nombre de funcin.
Sintaxis:
tipo

nombre_mtodo (lista_de_argumento) {
cuerpo del mtodo

}
tipo: especifica el tipo de dato devuelto por el mtodo.
nombre_mtodo: nombre que identifica al mtodo (usar identificador valido).
lista_de_parmetros: es un secuencia de parejas, formadas por el tipo y el identificador
del parmetro separados por comas, son variables que reciben el valor del argumento
pasadas al mtodo cuando este es llamado, si el mtodo no tiene parmetros entonces la
lista ser vaca.
Los mtodos que retornan algn valor deben utilizar return con la siguiente sintaxis:
return; (si

return valor;
no retorna ningn valor)

donde valor es una expresin con el valor que se devuelve, los mtodos en Java siempre se
deben declarar dentro de una clase.
Cuando un programa llama a un mtodo, el control del programa se transfiere al mtodo
llamado. Un mtodo llamado devuelve el control al llamador cuando ejecuta la sentencia
return o cuando se alcanza la llave derecha (}) al final del mtodo.
El siguiente ejemplo crea un programa en el cual se define un mtodo llamado mximo que
ser llamado desde la funcin main( ), este mtodo determinara el mayor de dos nmeros.
import java.io.*;
class prueba_max {
public static void main( String [ ] ar) throws IOException {
BufferedReader
entrada
=
new
BufferedReader(
new
System.in));
int num1, num2, res;
System.out.print(De el numero 1: );
System.out.flush( );
num1 = Integer.parseInt(entrada.readLine( ));
System.out.print(De el numero 2: );
System.out.flush( );
num2 = Integer.parseInt(entrada.readLine( ));
res = maximo(num1, num2);
System.out.println(El mximo valor es: + res);
}
static void mximo(int a, int b) {
if(a > b) return a;
else return b;
}

InputStreamReader(

Programacin III Introduccin al Java.. 28


} // fin clase prueba_max
La clase prueba_max contiene el
mtodo principal main( )
y el mtodo mximo( ). El
mtodo main( ) se diferencia de otros mtodos en que este es llamado por la maquina
virtual Java, mientras que el mtodo mximo( ) ser invocado por main( ). Java exige que
desde un mtodo esttico solo se pueden llamar otros mtodos estticos por esa razn
mximo( )
tambin tiene el modificador
static, adems este mtodo retorna un valor
entero y recibe dos parmetros enteros.
Paso de los argumentos a los mtodos:
Los argumentos se pasan a los mtodos en Java por valor, esto significa que se hace una
copia
del tipo de dato recibido, en otras palabras, tomemos como ejemplo el programa
anterior, al leer los valores a num1 se le asigna el valor de 10 ya num2 el valor de 21
cuando se llama al mtodo
mximo( ), res = mximo( num1, num2), se pasan estos dos
valores al mismo, este crea dos posiciones en memoria donde se almacenan
los valores
suministrados por num1 y num2, dichas posiciones son a y b, de tal manera que si en el
mtodo se modificara la informacin
de a o b esto no alteraria los valores de num1 y
num2. hagamos el siguiente ejemplo para demostrar lo anterior:
class

valor {
public static void main(String [ ] ar)
{
int a = 70;
System.out.println(Valor de a antes de llamar al mtodo: + a);
metodo(a);
System.out.println(Valor de a despus de llamar al mtodo: + a);
}
static void metodo( int x) {
System.out.println(Dentro del mtodo x = + x);
x = 200;
System.out.println(Cambiamos el valor de x ahora es = + x);
}

}
la salida queda as

al ejecutar el programa:

Valor de a antes de llamar al mtodo: 70


Dentro del mtodo x = 70
Cambiamos el valor de x ahora es = 200
Valor de a despus de llamar al mtodo: 70
En la tcnica de paso de parmetros por valor, el mtodo que recibe no puede
la variable que recibe el mtodo como argumento (parmetro pasado).

modificar

Sobrecarga de mtodos:
Tcnica mediante la cual dos o mas mtodos dentro de la misma clase tienen el mismo
nombre y las declaraciones de sus parmetros son diferentes. La sobrecarga es uno de los
procedimientos mediante el cual Java implementa el Polimorfismo.
Cuando Java llama un mtodo sobrecargado el compilador determina cual es el mtodo
invocado basndose en el numero
o tipo de argumento pasados; con lo cual los mtodos
sobrecargados deben tener diferentes tipos o numeraos de parmetro, cuando Java encuentra
una llamada a un mtodo sobrecargado, ejecuta la versin
del mtodo cuyos parmetros
coincidan con los argumentos utilizados en la llamada. Ejemplo: se define una clase con
2 mtodos sobrecargados, adicin( ),
diferencindose uno del otro por el numero/tipo
parmetro, el mtodo main( ) llama a los dos mtodos.

Programacin III Introduccin al Java.. 29


class sobrecarga {
public static void main(String [ ] ar ) {
int num1 = 25, num2 = 200;
double nu1 = 125.45, nu2 = 34.25;
System.out.println(Suma de enteros = + adicion(num1, num2));
System.out.println(Suma de reales = + adicion(nu1, nu2));
}
static int adicion( int x, int y) {
return x + y;
}
static double adicion( double z, double w) {
return z + w;
}
} // fin clase sobrecarga

Funciones matemticas
Mediante la clase Math se tiene acceso al conjunto de funciones matemticas estndar:
Math.abs( x )
para int, long, float y double Valor Absoluto de un Nro
Math.sin( double )
Retorna el seno de un ngulo en radianes
Math.cos( double )
Retorna el coseno de un ngulo en radianes
Math.tan( double )
Retorna el tangente de un ngulo en radianes
Math.asin( double )
retorna el arcoseno.
Math.acos( double )
retorna el arcocoseno.
Math.atan( double )
retorna el arcotangente.
Math.atan2( double,double )
convierte coodenadas rectangulares a polares
Math.exp( double )
retorna ex
Math.log( double )
retorna el logaritmo de un Nro.
Math.sqrt( double )
retorna la raiz cuadrada de un Nro.
Math.ceil( double )
retorna el valor ms pequeo que es menor o igual al valor dado
Math.floor( double )
retorna el valor ms grande que es menor o igual al valor dado
Math.rint( double )
retorna el redondeo del valor dado
Math.pow( a,b )
retorna ab
Math.round( x )
para double y float
Math.random()
devuelve un double retorna un Nro aleatorio.
Math.max( a,b )
para int, long, float y double retorna el valor mximo entre dos
Nros.
Math.min( a,b ) para int, long, float y double retorna el valor mnimo entre dos Nros.
Math.E
para la base exponencial
Math.PI
para PI

class Mates {
public static void main( String args[] ) {
int x;
double rand,y,z;
float max;
rand = Math.random();
x = Math.abs( -123 );
y = Math.round( 123.567 );
z = Math.pow( 2,4 );
max = Math.max( (float)1e10,(float)3e9 );

Programacin III Introduccin al Java.. 30


// Se imprimen en consola los nmeros obtenidos de las operaciones
// anteriores para comprobar los resultados de la aplicacin de
// los mtodos definidos en la clase Math
System.out.println( rand );
System.out.println( x );
System.out.println( y );
System.out.println( z );
System.out.println( max );
}
}
Vectores y matrices
Un vector (arreglo) es una manera de agrupar valores de un mismo tipo bajo un mismo
nombre. Para acceder a los valores individuales se asigna a cada uno de ellos un nmero
denominado ndice, el cual comienza en cero. En Java podemos declarar vectores de dos
maneras:
char c[], a; (tipo nombre_arreglo [ ];)
char [] p, d, f;

(tipo [ ] nombre_arreglo;)

El primer formato indica que es arreglo solo el identificador al que siguen los
corchetes(c es un
arreglo de caracteres y a una variable de carcter), el segundo
formato indica que todos los identificadores son arreglos del tipo (tanto p como d y f
serian arreglos de carcter).
Java no permite en la declaracin del arreglo que se indique el tamao del arreglo,
ejemplo:
int num[20]; en este caso se especifica que el arreglo tendr 20 elementos,
esta declaracin seria valida en C pero no en Java, el compilador producira un error.
Para indicar el tamao del arreglo se usa el operador new de la manera siguiente:
float notas [];
notas = new float [20];
primero se declara el arreglo notas de tipo flota y posteriormente se reserva la memoria
suficiente para que le arreglo almacene 20 elementos, esto se podra hacer en una sola
sentencia, as:
float notas [ ] = new float [20];
Atributo length: Java considera cada arreglo un objeto, debido a esto podemos conocer
el numero de elementos de un arreglo a travs de length, usando el siguiente formato:
nombre_variable = nombre_arreglo.length;
ejemplo:
double p [ ] = new double [20];
System.out.println(Tamao del arreglo: + p.length);
se mostrara:

Tamao del arreglo: 20.

Inicializacin de un arreglo:
Sea int c[ ] = new int [5]; para asignar valores a cada elemento del arreglo c se puede
escribir:
c[0] = 6;
c[1] = 3;
c[2] = -2;
c[3] = 40;
c[4] = 16;
la primera sentencia fija el valor de c[0] en 6, la segunda el valor de c[1] en 3 y asi
sucesivamente. Otra forma es asignar los valores en el momento en que se inicializa el
arreglo:

Programacin III Introduccin al Java.. 31


int c[ ] = { 6, 3, -2, 40, 16};
el compilador asigna automticamente 5 elementos a c, seria errneo hacerlo

as:

int c[ ] = new int[5];


c[ ] = { 6, 3, -2, 40, 16};
Tambin podemos asignar valores a un arreglo mediante un ciclo for o while/do while,
siendo este el mtodo ms usado:
BufferedReader entrada = new BufferedReader (new InputStreamReader (System.in));
int c[ ], x;
c[ ] = new int[5];
for(x=0; x < 5; ++x) {
System.out.print(De el elemento c[ + x + ]: );
System.out.flush( );
c[x] = Integer.parseInt(entrada.readLine());
}
El compilador de Java inicializara cualquier arreglo con un valor por defecto, cero, si
el arreglo es de tipo real, entero o de carcter.
No es lo mismo un arreglo de caracteres que una cadena de caracteres, la cadena se
almacena en objetos String, los arreglos de caracteres son arreglo de tipo char, una
secuencia de caracteres, con las mismas caractersticas que los arreglos de otro tipo.
Arreglos multidimensionales:
Los arreglos vistos anteriormente se conocen como arreglos unidimensionales ( una sola
dimensin), los multidimensionales son los que tiene mas de una dimensin, los usuales
son los de dos dimensiones.
Como se declaran?:
tipo nombre_areglo[] []; o tipo [] [] nombre_arreglo;
ejemplo:
char tabla [][];
double [][] tasa, carga;
estas declaraciones no reservan memoria, para
filas y columnas usamos new:

reservar memoria e indicar el numero de

tabla [][] = new char [2][3]; // matriz de 2 filas y 3 columnas


tasa[][] = new double[5][5]; // matriz cuadrada de 5 filas y 5 columnas
esto lo podemos hacer en una sola sentencia:
char tabla[][] = new char [2][3];
Inicializacin:
1) asignacin individual:
tabla[0][0]
a;
tabla[0][1]
e;
tabla[0][2]
c;
2)

asignacin el

= tabla[1][0]
j;
= tabla[1][1]
2;
= tabla[1][2]
#;

=
=
=

momento en que se declara:

char c[][] = { {a, e, c}, {j, 2, #}};

Programacin III Introduccin al Java.. 32


3) asignacin mediante ciclos:
for(x=0; x<2; ++x)
for(y=0; y < 3; ++y) {
System.out.print(tabla[ + x + , + y + ]: );
System.out.flush( );
tabla[x][y] = System.in.read( );
}
Uso de arreglos como parmetros:
La manera de pasar parmetros en java es por valor. Cuando se pasa un objeto, realmente
lo que se pasa es una referencia al objeto, la cual no se puede modificar ( ya que pasa
por valor); si se pueden modificar los datos miembros del objeto. Los arreglos en Java se
consideran objetos, por lo cual podrn modificarse los elementos del arreglo, pero no la
referencia a este. Ejemplo:
Escribir un mtodo que calcule el mayor de los elementos de un arreglo especificado.
import java.io.*;
class maximo_valor {
public ststic void main(String [] ar) throws IOException {
BufferedReader en = new BufferedReader ( new InputStreamReader (System.in));
int a[] = new int[5], x;
for(x=0; x < 5; ++x) {
System.out.print(De a[ + x + ]: );
System.out.flush( );
a[x] = Integer.parseInt(en.readLine( ));
}
System.out.println(El mayor elemento del arreglo es: + mximo(a));
}
static int mximo(int x[]) {
int y, mx;
mx = x[0];
for(y=0; y< x.length; ++y) mx = Math.max(mx,x[y]);
return mx;
}
}// fin clase mximo_valor
Cadenas
Una cadena es
una secuencia de caracteres delimitados por comillas; Java no tiene el
tipo cadena como tipo de dato primitivo sino que declara varias clases para el manejo de
cadenas, la ms importante es la clase String. Cual cadena es considerada un objeto
String que es diferente de un arreglo de caracteres. Ejemplo:
char

a[] = { `c`, a, r,a, c, a, s}

a es un arreglo de carteres.
String b = Caracas,

b es una cadena de carteres.

Inicializacin de variables de cadena:


Las variables de cadena se crean bien inicializndolas con una constante o bien con el
operador new, ejemplo:
String texto = La casa esta vacia; o
String texto;
texto = new String(La casa esta vacia);

Programacin III Introduccin al Java.. 33


Captura de cadenas por el teclado:
BufferedReader entrada = new BufferedReader ( new ImputStreamReader ( System.in));
String texto;
texto = entrada.readLine( );
el mtodo readLine( ) retorna un objeto cadena con los caracteres
ledos desde el
teclado.
Esta clase dispone de diversos mtodos para manipular cadenas: Sea a y b dos cadenas
Mtodo
length( ) :
concat( ):
charAt( ):
getChar( ):
substring( ):

compareTo( ):

equals( ):
equalsIgnoreCase(
):
toUpperCase( ):
toLowerCase( ):
trim( ):

replace( ):

toCharArray( ):

Accin
a.length retorna el numero de caracteres de la
cadena a
a.concat(b) aade la cadena b al final de la
cadena a
a.charAt(2) retorna el carcter que esta en la
posicin indicada (2) en la cadena a.
a.getChar(2,6,b,2) a partir de la posicin 2 de
la cadena a se extraen 6 caracteres los cuales se
almacenan en b a partir de la posicin 2.
b = a.substring(3,7) retorna todos los
caracteres que estn entre la posicin 3 y 7
menos uno de la cadena a. Si indicamos
a.substring(3) extrae caracteres desde la
posicin hasta el final de la cadena.
a.compareTo(b) compara la cadena con la cadena b
y retorna un valor entero igual a:
cero; si son iguales a y b
alfabticamente.
menor que cero; si a es menor
alfabticamente que b.
mayor que cero; si a es mayor
alfabticamente que b.
a.equals(b) devuelve true si a y b son iguales
alfabticamente tiene en cuenta las maysculas y
minsculas.
a.equalsIgnoreCase(b) devuelve true si a y b son
iguales alfabticamente no toma en cuenta las
maysculas y minsculas.
a = a.toUpperCase(a) devuelve una cadena con
todos los caracteres en mayscula.
a = a.toLowerCase(a) devuelve una cadena con
todos los caracteres en minscula.
b = a.trim( ) devuelve una cadena sin los
espacios en blanco que se encuentren al principio
o al final de la cadena a, ejemplo:
El
Corsario
trim -> El Corsario.
b = a.replace(a, #) devuelve una cadena en
la cual se a sustituido el carcter a por el
carcter #, ejemplo: La venta fue mala
replace -> L# vent# fue m#l#.
char [] c = a.toCharArray( ) devuelve un arreglo
con los caracteres de la cadena a.

Escribir un programa que llame a un mtodo que determine cuantas palabras hay en una
cadena leda por el teclado.
import java.io.*;
class cuenta_blancos
{
public static void main(String [] ar) throws IOException

Programacin III Introduccin al Java.. 34


BufferedReader en = new BufferedReader ( new InputStreamReader (System.in));
String cad;
int total;
System.out.print(Introdusca una cadena de caracteres);
System.out.flush( );
cad = en.readLine( );
total = cuentaBlancos(cad);
System.out.println(En la cadena leida hay : + total + palabra(s));
}
static int cuentaBlancos( String c ) {
int longitud, pal = 0, x;
longitud = c.length( ); //determina el tamao de la cadena
for( x = 0; x < longitud 1; ++x) //cuenta los blancos en la cadena
if( c.charAt(x) = = ) pal ++;
return ++pal;
}
} // fin clase cuenta_blancos
Manejo de excepciones
Uno de los problemas ms importantes en el desarrollo de software es la gestin de
condiciones de error, por muy bueno que sea el software siempre aparecen errores por
mltiples razones. Una Excepcin es, normalmente, una condicin de error imprevista, las
cuales suelen terminar el programa del usuario con un mensaje de error proporcionado por
el sistema, los errores tpicos entre otros son: agotamiento de memoria, errores de rango
en el manejo de los arreglos, divisin por cero, archivos inexistentes etc.
El manejo de excepciones es el mecanismo previsto por el lenguaje para el tratamiento de
excepciones, permitiendo al programador intentar la recuperacin de estas condiciones y
decidir si continuar o no la ejecucin del programa.
Procesamiento de excepciones
De forma muy simple el modelo de un mecanismo de excepciones consta de dos palabras
reservadas: try y catch.
try: bloque que contiene el cdigo que puede generar una excepcin.
catch: bloque que procesa una excepcin.
Cuando durante la ejecucin de un programa se produce un error que impide su ejecucin
se lanza una excepcin que hace que se visualice un mensaje acerca de lo ocurrido y se
detenga la ejecucin. Cuando esto ocurre si no deseamos que la ejecucin del programa se
detenga habr que utilizar try para poner en alerta al programa acerca del cdigo que
pueda lanzar una excecion y utilizar catch para capturar y manejar cada excepcin que se
lance.
Veamos el siguiente ejemplo:
public sttic double leerReal( ) {
double datReal = 0.0;
Scanner lector = new Sccaner(System.in);
Try {
datoReal = Double.parseDouble(lector.nextLine());
return datoReal;
} //Fin del bloque try
catch (NumberFormatException e) {
return 0.0;
} //Fin del bloque catch
} //Fin del mtodo leerReal

Programacin III Introduccin al Java.. 35


En el ejemplo anterior vemos que el bloque try intentamos convertir en double la cadena
de caracteres devuelta por nextLine, si se introduce una cadena que nos es convertible
aun nmero real, el sistema lanzara una excepcin del tipo NumberFormatException que ser
atrapada por el bloque catch lo que dara lugar a que el mtodo leerReal devuelva un cero.
Para probar el mtodo anterior puede escribir en el mtodo main el cdigo siguiente:
double r = 0.0;
do {
System.out.print(De un numero real: );
r = leerReal( );
} while (r == 0.0);
System.out.println(El valor ledo fue: + r);
Excepciones ms comunes
Excepcin
AritmeticException
NumberFormetException
IndexOutBoundsExeption
NegativeArraySizeException
NullPointerException

Significado
Desbordamiento de memoria o divisin por cero.
Conversin ilegal de una cadena a un tipo numrico.
Acceso a un elemento inexistente en un vector o en una
cadena.
Intento de creacin de un vector de longitud negativa.
Intento de uso de una referencia nula.

Вам также может понравиться