Download Descargar - Monografias.com

Document related concepts
no text concepts found
Transcript
20 de diciembre de 2010
[ALGORITMOS Y LEGUAJES DE PROGRAMACIÓN]
LENGUAJE JAVA
1 Introducción
En este capítulo se presentan las características generales de Java como lenguaje de
programación algorítmico debido a las necesidades de la epoca. En este apartado Java es muy
similar a C/C++, lenguajes en los que está inspirado. Se va a intentar ser breve, considerando
que el lector (programador) ya conoce algunos otros lenguajes de programación y está
familiarizado con lo que son variables, bifurcaciones, bucles, etc.
1.2 HISTORIA
En 1991, la empresa Sun Microsystems crea el lenguaje Oak (de la mano del llamado
proyecto Green). Mediante este lenguaje se pretendía crear un sistema de televisión
interactiva. Este lenguaje sólo se llegó a utilizar de forma interna. Su propósito era crear un
lenguaje independiente de la plataforma y para uso en dispositivos electrónicos.
Se intentaba con este lenguaje paliar el problema fundamental del C++; que consiste en que al
compilar se produce un fichero ejecutable cuyo código sólo vale para la plataforma en la que
se realizó la compilación. Sun deseaba un lenguaje para programar pequeños dispositivos
electrónicos. La dificultad de estos dispositivos es que cambian continuamente y para que un
programa funcione en el siguiente dispositivo aparecido, hay que rescribir el código. Por eso
Sun quería crear un lenguaje independiente del dispositivo.
En 1995 pasa a llamarse Java y se da a conocer al público. Adquiere notoriedad rápidamente.
Java pasa a ser un lenguaje totalmente independiente de la plataforma y a la vez potente y
orientado a objetos. Esa filosofía y su facilidad para crear aplicaciones para redes TCP/IP ha
hecho que sea uno de los lenguajes más utilizados en la actualidad. La versión actual de Java
es el llamado Java 2. Sus ventajas sobre C++ son:
Su sintaxis es similar a C y C++
No hay punteros (lo que le hace más seguro)
Totalmente orientado a objetos
Muy preparado para aplicaciones TCP/IP
Implementa excepciones de forma nativa
Es interpretado (lo que acelera su ejecución remota, aunque provoca que las
aplicaciones Java se ejecuten más lentamente que las C++ en un ordenador local).
o Permite multihilos
o Admite firmas digitales
o Tipos de datos y control de sintaxis más rigurosa
o Es independiente de la plataforma
La última ventaja (quizá la más importante) se consigue ya que el código Java no se compila,
sino que se precompila, de tal forma que se crea un código intermedio que no es ejecutable.
Para ejecutarle hace falta pasarle por un intérprete que va ejecutando cada línea. Ese
intérprete suele ser la máquina virtual de Java.
o
o
o
o
o
o
RAG-INFOR | Por auxiliar de docencia: Ruben Ajata Guarahi
1
20 de diciembre de 2010
[ALGORITMOS Y LEGUAJES DE PROGRAMACIÓN]
Proceso de compilación de un programa Java
2 CARACTERISTICAS
2.1 TIPOS DE APLICACIONES
2.1.1 Applets
Son programas Java pensados para ser colocados dentro de una página web. Pueden ser
interpretados por cualquier navegador con capacidades Java. Estos programas se insertan en
las páginas usando una etiqueta especial (como también se insertan vídeos, animaciones flash
u otros objetos).
Los applets son programas independientes, pero al estar incluidos dentro de una página web
las reglas de éstas le afectan. Normalmente un applet sólo puede actuar sobre el navegador.
Hoy día mediante applets se pueden integrar en las páginas web aplicaciones multimedia
avanzadas (incluso con imágenes 3D o sonido y vídeo de alta calidad)
2.1.2 Aplicaciones de consola
Son programas independientes al igual que los creados con los lenguajes tradicionales.
2.1.3 Aplicaciones gráficas
Aquellas que utilizan las clases con capacidades gráficas (como awt, swing por ejemplo).
2.1.4 Servlets
Son aplicaciones que se ejecutan en un servidor de aplicaciones web y que como resultado de
su ejecución resulta una página web.
2.1.5 Midlet
Aplicación creada con Java para su ejecución en sistemas de propósito simple o dispositivos
RAG-INFOR | Por auxiliar de docencia: Ruben Ajata Guarahi
2
20 de diciembre de 2010
[ALGORITMOS Y LEGUAJES DE PROGRAMACIÓN]
móviles. Los juegos Java creados para teléfonos móviles son midlets.
3 EMPEZAR A TRABAJAR CON JAVA
3.1 VERSIONES DE JAVA
Como se ha comentado anteriormente, para poder crear los bytecodes de un programa Java,
hace falta el SDK de Sun. Sin embargo, Sun va renovando este kit actualizando el lenguaje. De
ahí que se hable de Java 1.1, Java 1.2, etc. Los nombres de los distintos SDK y del lenguaje
correspondiente, están reflejados en la siguiente tabla:
Versión del SDK para la versión estándar de
Java
1.0
1.1
1.2
1.3
1.4
1.5
1.6
1.7
Nombre que se le da al kit de desarrollo
JDK 1.0
JDK 1.1
J2SE 1.2
J2SE 1.3
J2SE 1.4
J2SE 1.5
Java SE 6
Java SE 7
Desde la versión 1.2 se habla de Java 2. Desde la versión 1.6 se ha abandonado la terminología
Java 2 y ahora se habla de Java 6 y Java 7 para las versiones 1.6 y 1.7 del kit de desarrollo.
Cada versión tiene varias revisiones, así la versión 1.6.7 del SDK indica versión 6 de Java,
revisión 7.
3.1.1 Java 1.0 (JDK 1.0)
Fue la primera versión de Java y propuso el marco general en el que se desenvuelve Java. Está
oficialmente obsoleto, pero hay todavía muchos clientes con esta versión.
3.1.2 Java 1.1 (JDK 1.1)
Mejoró la versión anterior incorporando las siguientes mejoras:
o
o
o
o
o
JDBC, API de acceso a bases de datos
RMI llamadas a métodos remotos. Es una técnica de comunicación de procesos en red
JavaBeans, componentes independientes reutilizables.
Internacionalización para crear programas adaptables a todos los idiomas
Clases internas
3.1.3 Java 2 (J2SE 1.2)
Apareció en Diciembre de 1998 al aparecer el JDK 1.2. Incorporó notables mejoras como por
ejemplo:
o JFC. Java Foundation classes. El conjunto de clases de todo para crear programas más
atractivos de todo tipo. Dentro de este conjunto están:
RAG-INFOR | Por auxiliar de docencia: Ruben Ajata Guarahi
3
20 de diciembre de 2010
o
o
o
o
o
o
o
o
o
o
o
[ALGORITMOS Y LEGUAJES DE PROGRAMACIÓN]
El paquete Swing. Mejorando notablemente al anterior paquete AWT. Se trata de
todo un conjunto de clases que permiten desarrollar fácilmente entornos de ventanas.
Es parte de JFC.
Enterprise Java beans. Para la creación de componentes para aplicaciones
distribuidas del lado del servidor
Java Media. Conjunto de paquetes para crear paquetes multimedia:
 Java 2D. Paquete (parte de JFC) que permite crear gráficos de alta calidad en
los programas de Java.
 Java 3D. Paquete (parte de JFC) que permite crear gráficos tridimensionales.
 Java Media Framework. Paquete marco para crear elementos multimedia
 Java Speech. Para reconocimiento de voz.
 Java Sound. Audio de alta calidad
 Java TV. Televisión interactiva
JNDI. Java Naming and Directory Interface. Servicio general de búsqueda de
recursos. Integra los servicios de búsqueda más populares (como LDAP por ejemplo).
Java Servlets. Herramienta para crear aplicaciones de servidor web (y también otros
tipos de aplicaciones).
Java Cryptography. Algoritmos para encriptar y desencriptar.
Java Help. Creación de sistemas de ayuda.
Jini. Permite la programación de electrodomésticos.
Java card. Versión de Java dirigida a pequeños dispositivos electrónicos.
Java IDL. Lenguaje de definición de interfaz. Permite crear aplicaciones tipo CORBA
(plataforma de desarrollo de sistemas distribuidos)
Clases para la creación de colecciones
3.1.4 Java 1.3 (J2SE 1.3)
o Se utiliza la máquina virtual de Hotspot (más rápida y segura).
o Se modifica RMI para que trabaje con CORBA
o JPDA, Java Platform Debugger Architectura
3.1.5 Java 1.4 (J2SE 1.4)
o
o
o
o
Aparecen las aserciones (assert)
Expresiones regulares estilo Perl.
NIO. Nuevo interfaz de entrada y salida de datos.
JAXP. API de desarrollo de documentos XML.
3.1.6 Java 1.5 (J2SE 1.5)
o
o
o
o
o
o
Aparecen las plantillas
Metadatos
Autoboxing, conversión automática de tipos a tipos envolventes.
Enumeraciones
Argumentos variables (varargs)
Mejora del bucle for
3.1.7 Java 1.6 (Java SE 6)
o
Combinación con otros lenguajes (PHP, Ruby, Perl,…)
RAG-INFOR | Por auxiliar de docencia: Ruben Ajata Guarahi
4
20 de diciembre de 2010
o
[ALGORITMOS Y LEGUAJES DE PROGRAMACIÓN]
Últimas especificaciones de JAX-WS 2.0, JAXB 2.0, STAX y JAXP para crear servicios
web.
4 ESCRITURAS DE PROGRAMAS JAVA
4.1 EL PRIMER PROGRAMA EN JAVA
public class Ejemplo1
{
public static void main (String[] args)
{
System.out.println ("¡Mi primer ejemplo!");
}
}
Este código sirve para escribir ¡Mi primer ejemplo! en la pantalla. Para empezar a entender el
código:
o La primera línea (public class Ejemplo1) declara el nombre de la clase del código.
Más adelante se explicará que significa el concepto de clase; por ahora entenderemos
que el nombre de la clase es el nombre del programa.
o
o
La línea public static void main(String args[]), sirve para indicar el inicio del método
main. Este método contiene las instrucciones que se ejecutarán cuando el programa
arranque. Es decir lo que está tras las llaves del main, es el programa en sí, public esto
indica que el subprograma sea público, static esto indica que el programa sea de tipo
consola caso contrario si no escribimos el código static el programa se ejecutara como
aplets, void es la que indica la ausencia de un tipo de variable determinado.
La instrucción System.out.println sirve para escribir en pantalla. Como lo que
escribimos es un texto, se encierra entre comillas.
Además, el archivo tiene que llamarse obligatoriamente Ejemplo1.java ya que el nombre del
programa (en realidad el nombre de la clase) y el del archivo deben coincidir.
4.2 IMPORT
Hay código que se puede utilizar en los programas que realicemos en Java. Se importar clases
de objetos que están contenidas, a su vez, en paquetes estándares.
Por ejemplo la clase Date es una de las más utilizadas, sirve para manipular fechas. Si alguien
quisiera utilizar en su código objetos de esta clase, necesita incluir una instrucción que
permita utilizar esta clase. La sintaxis de esta instrucción es:
import paquete.subpaquete.subsubapquete....clase
Esta instrucción se coloca arriba del todo en el código. Para la clase Date sería:
import java.util.Date
RAG-INFOR | Por auxiliar de docencia: Ruben Ajata Guarahi
5
20 de diciembre de 2010
[ALGORITMOS Y LEGUAJES DE PROGRAMACIÓN]
Lo que significa, importar en el código la clase Date que se encuentra dentro del paquete util
que, a su vez, está dentro del gran paquete llamado java.
También se puede utilizar el asterisco en esta forma:
import java.util.*
Esto significa que se va a incluir en el código todas las clases que están dentro del paquete util
de java.
Ejemplo:
import java.util.Date;
public class fecha
{
public static void main (String[] args){
System.out.print (new Date ());}
}
5 VARAIABLES
Las variables son los contenedores de los datos que utiliza un programa. Cada variable ocupa
un espacio en la memoria RAM del ordenador para almacenar un dato determinado.
Las variables tienen un nombre (un identificador) que sólo puede contener letras, números y
el carácter de subrayado (también vale el símbolo $). El nombre puede contener cualquier
carácter Unicode.
5.1 DECLARACION DE UNA VARIABLE
Antes de poder utilizar una variable, ésta se debe declarar. Lo cual se debe hacer de esta
forma:
tipo nombrevariable;
Donde tipo es el tipo de datos que almacenará la variable (texto, números enteros,...) y
nombrevariable es el nombre con el que se conocerá la variable. Ejemplos:
int edad;
boolean decision;
También se puede hacer que la variable tome un valor inicial al declarar:
int edad=20;
Y también se puede declarar más de una variable a la vez:
int dia=12, mes=2, anio;
Al declarar una variable se puede incluso utilizar una expresión:
RAG-INFOR | Por auxiliar de docencia: Ruben Ajata Guarahi
6
20 de diciembre de 2010
[ALGORITMOS Y LEGUAJES DE PROGRAMACIÓN]
int x=5, y=3;
int z=x+y;
5.2 ALCANCE O ÁMBITO DE UNA VARIABLE
Esas dos palabras sinónimas, hacen referencia a la duración de una variable. En el
ejemplo:
{
int x=12;
}
System.out.println(x);
//Error!!!
Java dará error, porque la variable se usa fuera del bloque en el que se creó. Eso no es
posible, porque una variable tiene como ámbito el bloque de código en el que fue creada
(salvo que sea una propiedad de un objeto).
int x;
{
x=12;
}
System.out.println(x);
//Correcto!!!
5.3 NOMBRES DE VARIABLES
Los nombres de variables en Java se pueden crear con mucha libertad. Pueden ser cualquier
conjunto de caracteres numéricos y alfanuméricos, sin algunos caracteres especiales utilizados
por Java como operadores o separadores ( ,.+-*/ etc.).
Existe una serie de palabras reservadas las cuales tienen un significado especial para Java y
por lo tanto no se pueden utilizar como nombres de variables. Dichas palabras son:
abstract
char
double
for
null
package
static
throws
boolean
class
else
int
goto*
private
super
transient
break
byte
const* continúa
extends
final
interface
long
if
implements
protected
public
switch synchronized this
try
void
case
catch
do
finally float
native
new
import
instanceof
return
short
throw
volatile
while
default
(*) Son palabras reservadas, pero no se utilizan en la actual implementación del lenguaje Java.
5.4 TIPOS DE DATOS PRIMITIVOS
Se llaman tipos primitivos de variable de Java a aquellas variables sencillas que contienen los
tipos de información más habituales: valores boolean, caracteres y valores numéricos enteros o
de punto flotante (decimales).
Java dispone de ocho tipos primitivos de variables: un tipo para almacenar valores true y false
(boolean); un tipo para almacenar caracteres (char ), y 6 tipos para guardar valores
RAG-INFOR | Por auxiliar de docencia: Ruben Ajata Guarahi
7
20 de diciembre de 2010
[ALGORITMOS Y LEGUAJES DE PROGRAMACIÓN]
numéricos, cuatro tipos para enteros (byte, short, int y long) y dos para valores reales de
punto flotante (float y double). Los rangos y la memoria que ocupa cada uno de estos tipos se
muestran en la Tabla
Tipo de variable
Boolean
Byte
Short
Int
Long
Float
Double
Char
Void
Byte que ocupa
1
1
2
4
8
4
8
2
0
Rango de valores
true, false
-128 a 127
-32768 a 32767
-2147483648 a 2147483649
-9*1018 a 9*1018
-1.79*10308 a 1.79*10308
-3.4*1028 a 3.4*1038
Caracteres (en Unicode)
Sin valor
5.4.1 Números de tipo Entero
Los tipos byte, short, int y long sirven para almacenar datos enteros. Los enteros son
números sin decimales. Se pueden asignar enteros normales o enteros octales y
hexadecimales. Los octales se indican anteponiendo un cero al número, los hexadecimales
anteponiendo 0x.
int numero=16;
numero=020;
numero=0x14;
//16 decimal
//20 octal=16 decimal
//10 hexadecimal=16 decimal
Normalmente un número literal se entiende que es de tipo int salvo si al final se le coloca la
letra L; se entenderá entonces que es de tipo long.
No se acepta en general asignar variables de distinto tipo. Sí se pueden asignar valores de
variables enteras a variables enteras de un tipo superior (por ejemplo asignar un valor int a
una variable long). Pero al revés no se puede:
int x=12;
byte y=x;
//error de compilación
La solución es hacer un cast. Esta operación permite convertir valores de un tipo a otro.
Se usa así:
int x=12;
byte y=(byte)x;
//No hay problema por el (cast)
Hay que tener en cuenta en estos cast que si el valor asignado sobrepasa el rango del
elemento, el valor convertido no tendrá ningún sentido:
int x=1200;
byte y=(byte)x;
//El valor de y no tiene sentido
RAG-INFOR | Por auxiliar de docencia: Ruben Ajata Guarahi
8
20 de diciembre de 2010
[ALGORITMOS Y LEGUAJES DE PROGRAMACIÓN]
5.4.2 Números de tipo Flotante (decimales)
Los decimales se almacenan en los tipos float y double. Se les llama de coma flotante por
como son almacenados por el ordenador. Los decimales no son almacenados de forma exacta
por eso siempre hay un posible error. En los decimales de coma flotante se habla, por tanto de
precisión. Es mucho más preciso el tipo double que el tipo float.
Para asignar valores literales a una variable de coma flotante, hay que tener en cuenta que el
separador decimal es el punto y no la coma. Es decir para asignar el valor 2,75 a la variable x
se haría:
x=2.75;
A un valor literal (como 1.5 por ejemplo), se le puede indicar con una f al final del número que
es float (1.5f por ejemplo) o una d para indicar que es double. Si no se indica nada, un número
literal siempre se entiende que es double, por lo que al usar tipos float hay que convertir los
literales.
Los valores decimales se pueden representar en notación decimal: 1.345E+3 significaría
1,345·103 o lo que es lo mismo 1345.
Lógicamente no podemos asignar valores decimales a tipos de datos enteros:
int x=9.5;
//error
Sí podremos mediante un cast:
int x=(int) 9.5;
Pero perderemos los decimales (en el ejemplo, x vale 9). El caso contrario sin embargo sí se
puede hacer:
int x=9;
double y=x;
//correcto
La razón es que los tipos de coma flotante son más grandes que los enteros, por lo que no hay
problema de pérdida de valores.
Al declarar números del tipo que sean, si no se indican valores iniciales, Java asigna el valor
cero.
5.4.3 Booleanos
Los valores booleanos (o lógicos) sirven para indicar si algo es verdadero (true) o falso
(false).
boolean x=true;
Si al declarar un valor booleano no se le da un valor inicial, se toma como valor inicial el valor
false. Por otro lado, a diferencia del lenguaje C, no se pueden en Java asignar números a
una variable booleana (en C, el valor false se asocia al número 0, y cualquier valor distinto
de cero se asocia a true).
RAG-INFOR | Por auxiliar de docencia: Ruben Ajata Guarahi
9
20 de diciembre de 2010
[ALGORITMOS Y LEGUAJES DE PROGRAMACIÓN]
Tampoco tiene sentido intentar asignar valores de otros tipos de datos a variables booleanas
mediante casting:
boolean x=(boolean) 9;
//no tiene sentido
5.4.4 Caracteres
Los valores de tipo carácter sirven para almacenar símbolos de escritura (en Java se puede
almacenar cualquier código Unicode). Los valores Unicode son los que Java utiliza para los
caracteres. Ejemplo:
char letra;
letra=’C’;
letra=67;
//Los caracteres van entre comillas
//El código Unicode de la C es el 67. Esta línea
//hace lo mismo que la anterior
También hay una serie de caracteres especiales que van precedidos por el símbolo \, son
estos:
Carácter
\’
\”
\\
\b
\ddd
\f
\n
\r
\t
\udddd
Significado
Comilla simple
Comillas dobles
Barra invertida ó inclinada (backslash)
Espacio blanco o retroceso
Carácter octal
Avance ó alimentación de pagina
Nueva línea
Retorno de carro
Tabulador
Las cuatro letras d, son en realidad números en hexadecimal.
Representa el carácter Unicode cuyo código es representado por las
dddd
5.4.5 Conversión entre tipos (casting)
Ya se ha comentado anteriormente la necesidad de uso del operador de casting para poder
realizar asignaciones entre tipos distintos. Como resumen general del uso de casting véanse
estos ejemplos:
int x;
byte y=12;
x=y;
El código anterior es correcto porque un dato byte es más pequeño que uno int y Java le
convertirá de forma implícita. Lo mismo pasa de int a double por ejemplo. Sin embargo en:
int x=1;
byte y;
y=x;
RAG-INFOR | Por auxiliar de docencia: Ruben Ajata Guarahi
10
20 de diciembre de 2010
[ALGORITMOS Y LEGUAJES DE PROGRAMACIÓN]
El compilador devolverá error aunque el número 1 sea válido para un dato byte. Para ello hay
que hacer un casting. Eso significa poner el tipo deseado entre paréntesis delante de la
expresión.
int x=1;
byte y;
y= (byte) x;
//correcto
En el siguiente ejemplo:
byte n1=100, n2=100, n3;
n3= n1 * n2 /100;
Aunque el resultado es 100, y ese resultado es válido para un tipo byte; lo que ocurrirá en
realidad es un error. Eso es debido a que la multiplicación 100 * 100 da como resultado
10000, es decir un número de tipo int. Aunque luego se divide entre 100, no se vuelve a
convertir a byte; ya que ante cualquier operación el tipo resultante siempre se
corresponde con el tipo más grande que intervenga en la operación. Lo correcto sería:
n3 = (byte) (n1 * n2 / 100);
6 OPERADORES
Los datos se manipulan muchas veces utilizando operaciones con ellos. Los datos se
suman, se restan,... y a veces se realizan operaciones más complejas.
6.1 Operadores aritméticos
Son:
Operador
Significado
+
Suma
Resta
*
Producto
/
División
%
Módulo (resto)
Hay que tener en cuenta que el resultado de estos operadores varía notablemente si usamos
enteros o si usamos números de coma flotante.
Por ejemplo:
double operacion1, x=14, y=5;
int operacion2, a=14, b=5;
operacion1= x / y;
operacion2= a / b;
operacion1 valdrá 2.8 mientras que operacion2 valdrá 2.
Es más incluso:
RAG-INFOR | Por auxiliar de docencia: Ruben Ajata Guarahi
11
20 de diciembre de 2010
[ALGORITMOS Y LEGUAJES DE PROGRAMACIÓN]
double operacion; int a=7, b=2;
operacion=a/b;
//Operación valdrá 3
operacion=(double)a/b;
//Operación valdrá 3.5
El operador del módulo (%) sirve para calcular el resto de una división entera. Ejemplo:
int operacion, a=14, b=5;
operacion = a % b;
//Operación será 4
El módulo sólo se puede utilizar con tipos enteros
6.2 Operadores unarios
Los operadores mas (+) y menos (-) unarios sirven para mantener o cambiar el signo de una
variable, constante o expresión numérica. Su uso en Java es el estándar de estos operadores.
6.3 Operadores condicionales
Sirven para comparar valores. Siempre devuelven valores booleanos. Son:
Operador
>
>=
<
<=
==
!=
Utilización
op1>op2
op1>=op2
op1<op2
op1<=op2
op1==op2
op1!>op2
El resultado es true
si op1 es mayor que op2
si op1 es mayor o igual que op2
si op1 es menor que op2
si op1 es menor o igual que op2
si op1 y op2 son iguales
si op1 y op2 son diferentes
6.4 Operadores lógicos
Los operadores lógicos se utilizan para construir expresiones lógicas, combinando valores
lógicos (true y/o false) o los resultados de los operadores relacionales. La Tabla muestra los
operadores lógicos de Java. Debe notarse que en ciertos casos el segundo operando no se
evalúa porque ya no es necesario (si ambos tienen que ser true y el primero es false, ya se sabe
que la condición de que ambos sean true no se va a cumplir). Esto puede traer resultados no
deseados y por eso se han añadido los operadores (&) y (|) que garantizan que los dos
operandos se evalúan siempre.
Operador
Nombre
Utilización
&&
AND
op1 && op2
||
OR
op1 | | op2
!
negación
! op
&
AND
op1 & op2
|
OR
op1 | op2
RAG-INFOR | Por auxiliar de docencia: Ruben Ajata Guarahi
Resultado
true si op1 y op2 son true. Si op1 es false ya
no se evalúa op2
true si op1 u op2 son true. Si op1 es true ya
no se evalúa op2
true si op es false y false si op es true
true si op1 y op2 son true. Siempre se
evalúa op2
true si op1 u op2 son true. Siempre se
evalúa op2
12
20 de diciembre de 2010
[ALGORITMOS Y LEGUAJES DE PROGRAMACIÓN]
6.5 Operadores que actúan a nivel de bits
Java dispone también de un conjunto de operadores que actúan a nivel de bits. Las operaciones
de bits se utilizan con frecuencia para definir señales o flags, esto es, variables de tipo entero
en las que cada uno de sus bits indica si una opción está activada o no. La Tabla muestra los
operadores de Java que actúan a nivel de bits.
Operador
>>
<<
Utilización
op1 >> op2
op1 << op2
>>>
op1 >>> op2
&
|
op1 & op2
op1 | op2
^
op1 ^ op2
~
~op2
Resultado
Desplaza los bits de op1 a la derecha una distancia op2
Desplaza los bits de op1 a la izquierda una distancia op2
Desplaza los bits de op1 a la derecha una distancia op2
(positiva)
Operador AND a nivel de bits
Operador OR a nivel de bits
Operador XOR a nivel de bits (1 si sólo uno de los operandos
es 1)
Operador complemento (invierte el valor de cada bit)
En binario, las potencias de dos se representan con un único bit activado. Por ejemplo, los
números (1, 2, 4, 8, 16, 32, 64, 128) se representan respectivamente de modo binario en la
forma00000001, 00000010, 00000100, 00001000, 00010000, 00100000, 01000000,
10000000), utilizando sólo 8 bits. La suma de estos números permite construir una variable
flags con los bits activados que se deseen. Por ejemplo, para construir una variable flags que
sea 00010010 bastaría hacer flags=2+16. Para saber si el segundo bit por la derecha está o no
activado bastaría utilizar la sentencia,
if (flags & 2 == 2) {...}
La Tabla muestra los operadores de asignación a nivel de bits.
Operador
&=
|=
^=
<<=
>>=
>>>=
Utilización
op1 &= op2
op1 |= op2
op1 ^= op2
op1 <<= op2
op1 >>= op2
op1 >>>= op2
Equivalente a
op1 = op1 & op2
op1 = op1 | op2
op1 = op1 ^ op2
op1 = op1 << op2
op1 = op1 >> op2
op1 = op1 >>> op2
6.6 Operadores de asignación
Permiten asignar valores a una variable. El fundamental es “=”. Pero sin embargo se pueden
usar expresiones más complejas como:
x += 3;
En el ejemplo anterior lo que se hace es sumar 3 a la x (es lo mismo x+=3, que x=x+3). Eso se
puede hacer también con todos estos operadores:
RAG-INFOR | Por auxiliar de docencia: Ruben Ajata Guarahi
13
20 de diciembre de 2010
Operador
+=
-=
*=
/=
%=
[ALGORITMOS Y LEGUAJES DE PROGRAMACIÓN]
Utilización
op1 += op2
op1 -= op2
op1 *= op2
op1 /= op2
op1 %= op2
Expresión equivalente
op1 = op1 + op2
op1 = op1 - op2
op1 = op1 * op2
op1 = op1 / op2
op1 = op1 % op2
También se pueden concatenar asignaciones (aunque no es muy recomenda-ble):
x1 = x2 = x3 = 5;
//todas valen 5
Otros operadores de asignación son “++” (incremento) y “--“(decremento). Ejemplo:
x++;
x--;
//esto es x=x+1;
//esto es x=x-1;
Pero hay dos formas de utilizar el incremento y el decremento. Se puede usar por ejemplo x++
o ++x
La diferencia estriba en el modo en el que se comporta la asignación.
Ejemplo:
int x=5, y=5, z;
z=x++;
//z vale 5, x vale 6
z=++y;
//z vale 6, y vale 6
6.7 Precedencia de operadores
El orden en que se realizan las operaciones es fundamental para determinar el resultado de
una expresión. Por ejemplo, el resultado de x/y*z depende de qué operación (la división o el
producto) se realice primero. La siguiente lista muestra el orden en que se ejecutan los
distintos operadores en un sentencia, de mayor a menor precedencia:
Operador postfix
Operadores unarios
Creación de cast
Multiplicación
*/%
Adicion
Desplazamientos
Relaciones
Igualdad
bitwise AND
bitwise exclusive OR
bitwise inclusive OR
Lógico AND
Lógico OR
Condicionales
?:
Asignación
[] . (params) expr++ expr-++expr --expr +expr -expr ~!
new (type)expr
+<< >> >>>
< > <= >= instanceof
== ! =
&
^
|
&&
||
= += -= *= /= %= &= ^= |= <<= >>= >>>=
RAG-INFOR | Por auxiliar de docencia: Ruben Ajata Guarahi
14
20 de diciembre de 2010
[ALGORITMOS Y LEGUAJES DE PROGRAMACIÓN]
7 CONSTANTES
Una constante es una variable de sólo lectura. Dicho de otro modo más correcto, es un valor
que no puede variar (por lo tanto no es una variable).
La forma de declarar constantes es la misma que la de crear variables, sólo que hay que
anteponer la palabra final que es la que indica que estamos declarando una constante y por
tanto no podremos variar su valor inicial:
final double PI=3.141591;
PI=4;
//Error, no podemos cambiar el valor de PI
Como medida aconsejable (aunque no es obligatoria, sí altamente recomendable), los
nombres de las constantes deberían ir en mayúsculas.
8 LECTURA Y ESCRITOR POS TECLADO
8.1 escritura
Ya hemos visto que hay una función para escribir que es System.out.println. Dicha función
puede recibir como parámetro cualquier tipo básico de datos: es decir puede recibir un texto
literal (siempre entre comillas), pero también puede escribir expresiones enteras, booleanas,
decimales y caracteres simples.
Ejemplo:
int a=5, b=9;
double c=5.5;
System.out.println("Este es un texto literal");
System.out.println(a+b);
//Escribe 14
System.out.println(c*c);
//Escribe 30.25
System.out.println(a<c);
//Escribe true
Esta función tras escribir añade un salto de línea, de modo que lo siguiente que se escriba
saldrá en otra línea. Existe una variante de esta función que no inserta el salto de línea es
System.out.print:
System.out.print("todo en la ");
System.out.print("misma línea ");
Si deseamos que el mismo println o print escriba varios valores en la misma instrucción,
podemos usar el operador de encadenar textos, ejemplo:
int a=5, b=9;
System.out.println("La suma es "+(a+b));
Es necesario usar paréntesis ya que se utiliza en la expresión el operador + con dos
significados. Este operador concatena cuando al menos hay un texto a la izquierda o derecha
del operador; y suma cuando tenemos dos números (del tipo que sea).
RAG-INFOR | Por auxiliar de docencia: Ruben Ajata Guarahi
15
20 de diciembre de 2010
[ALGORITMOS Y LEGUAJES DE PROGRAMACIÓN]
8.2 Lectura
La lectura en Java es mucho más complicada. Leer de la consola de salida requiere manejar
muchos conocimientos que pertenecen a temas más avanzados que el actual.
Una forma no tan complicada (aunque desde luego no es tan sencilla como la escritura) es
utilizar la clase JOptionPane. Dicha clase pertenece al paquete javax.swing, por lo que para
utilizarla sin tener que escribir el nombre completo conviene usar la instrucción:
import javax.swing.JOptionPane;
Esta es una clase pensada para manejar cuadros de diálogo de tipo Swing (véase tema ¡Error!
No se encuentra el origen de la referencia. ¡Error! No se encuentra el origen de la
referencia.). Uno de estos cuadros permite introducir datos y que una variable les almacene.
El problema es que todos los datos les devuelve en forma de String (texto), lo que implica
almacenarles en una variable de ese tipo y luego convertirlos al tipo apropiado (int, double,
char,…). Ejemplo:
import javax.swing.JOptionPane;
class Lectura
{
public static void main (String args[])
{
String texto = JOptionPane.showInputDialog ("Escriba un número entero");
int n = Integer.parseInt (texto);
}
}
Evidentemente este código no es fácil. Para explicar vamos línea a línea:
o
En la primera línea, la variable texto almacena lo que el usuario escriba en el cuadro
de mensaje. JOptionPane.showInputDialog es la función que permite sacar el cuadro
de mensaje. "Escriba un número entero" es el texto que presenta el mensaje. Es decir
el resultado de esta instrucción es:
o
En cuanto el usuario o usuaria escriba el número y lo acepten (botón Aceptar), lo
escrito se almacena en la variable texto
En la segunda línea, la función Integer.parseInt sirve para convertir el número escrito
a forma de entero int. Sin esta conversión no podemos manipular lo escrito como
número, ya que se considera un texto (un String).
o
RAG-INFOR | Por auxiliar de docencia: Ruben Ajata Guarahi
16
20 de diciembre de 2010
o
[ALGORITMOS Y LEGUAJES DE PROGRAMACIÓN]
Si el usuario cancela el cuadro o bien no escribe un número entero, ocurre un error
que provocará que el programa finalice la ejecución. Arreglar estos errores será algo
que veremos más adelante.
Aunque el código es un tanto críptico a estas alturas, merece la pena aprenderle ya que
permite más posibilidades de hacer programas para practicar. De otro modo no tendremos
manera de leer datos por teclado y eso supone una tara importante para nuestros programas.
Hay que señalar que hay más funciones de conversión, se pueden apreciar en esta tabla:
Función
Integer.parseInt
Short.parseShort
Byte.parseByte
Long.parseLong
Float.parseFloat
Double.parseDouble
Boolean.parseBoolean
Convierte a
int
short
byte
long
float
double
boolean
Hay que tener cuidado con las mayúsculas, son obligatorias donde aparezcan.
9 Utilización de la clase Math
Se echan de menos operadores matemáticos más potentes en Java. Por ello se ha incluido una
clase especial llamada Math dentro del paquete java.lang. Para poder utilizar esta clase, se
debe incluir esta instrucción (aunque normalmente no es necesario porque todo el paquete
java.lang ya estará incluido en nuestro código):
import java.lang.Math;
Esta clase posee métodos muy interesantes para realizar cálculos matemáticos complejos. Por
ejemplo:
double x= Math.pow(3,4);
//x es 34, es decir 81
Ejemplo:
import java.lang.Math;
public class Ejemplo
{
public static void main (String args[]) {
System.out.print ("3*3*3*3 = " + Math.pow (3, 4)); // Escribe 81
}
}
Math posee dos constantes, que son:
Constante
double E
double PI
RAG-INFOR | Por auxiliar de docencia: Ruben Ajata Guarahi
Significado
El número e (2, 7182818245...)
El número Π (3,14159265...)
17
20 de diciembre de 2010
[ALGORITMOS Y LEGUAJES DE PROGRAMACIÓN]
Por otro lado posee numerosos métodos que son:
Operador
double ceil(double x)
double floor(double x)
int round(double x)
double rint(double x)
double random()
tiponum abs(tiponum x)
tiponum min(tiponum x,
tiponum y)
tiponum max(tiponum x,
tiponum y)
double sqrt(double x)
double pow(double x, double y)
double exp(double x)
double log(double x)
double acos(double x)
double asin(double x)
double atan(double x)
double sin(double x)
double cos(double x)
double toDegrees(double
anguloEnRadianes)
double toRadians(double
anguloEnGrados)
double signum(double n)
double hypot(double x, double y)
double nextAfter(double valor, double
dir)
Significado
Redondea x al entero mayor siguiente:
o Math.ceil(2.8) vale 3
o Math.ceil(2.4) vale 3
o Math.ceil(-2.8) vale -2
Redondea x al entero menor siguiente:
o Math.floor(2.8) vale 2
o Math. floor (2.4) vale 2
o Math. floor (-2.8) vale -3
Redondea x de forma clásica:
o Math.round(2.8) vale 3
o Math. round (2.4) vale 2
o Math. round (-2.8) vale -3
Idéntico al anterior, sólo que éste método da como
resultado un número double mientras que round da
como resultado un entero tipo int
Número aleatorio decimal situado entre el 0 y el 1
Devuelve el valor absoluto de x.
Devuelve el menor valor de x o y
Devuelve el mayor valor de x o y
Calcula la raíz cuadrada de x
Calcula xy
Calcula ex
Calcula el logaritmo neperiano de x
Calcula el arco coseno de x
Calcula el arco seno de x
Calcula el arco tangente de x
Calcula el seno de x
Calcula el coseno de x
Convierte de radianes a grados
Convierte de grados a radianes
Devuelve el valor del signo del número n. Si n vale cero, la
función devuelve cero; si es positivo devulve 1.0 y si es
negativo -1.0
Esta función apareción en la versión 1.5 de Java.
Suponiendo que x e y son los dos catetos de un triángulo
rectángulo, la función devuelve la hipotenusa
correspondiente según el teorema de Pitágoras.
Disponible desde la versión 1.5
Devuelve el siguiente número representable desde el
valor indicado hacia la dirección que indique el valor del
parámetro dir.
Por ejemplo Math.nextAfter(34.7, 90) devolvería
34.7000000001
Función añadida en la versión Java 1.6
RAG-INFOR | Por auxiliar de docencia: Ruben Ajata Guarahi
18
20 de diciembre de 2010
[ALGORITMOS Y LEGUAJES DE PROGRAMACIÓN]
9.1 números aleatorios
Una de las aplicaciones más interesantes de Math es la posibilidad de crear números
aleatorios. Para ello se utiliza el método random que devuelve un número double entre cero
y uno.
Para conseguir un número decimal por ejemplo entre cero y diez bastaría utilizar la
expresión:
Math.random()*10
Si el número queremos que se encuentre entre uno y diez, sería:
Math.random()*9+1
Y si queremos que sea un número entero entre 1 y 10, la expresión correcta es:
(int) Math.floor(Math.random()*10+1)
Entre 10 y 30 sería:
(int) Math.floor(Math.random()*21+10)
Ejemplo:
import java.lang.Math;
public class Ejemplo
{
public static void main (String args[])
{
System.out.print ((int) Math.floor (Math.random () * 10 + 5));
}
}
10 ESTRUCTURAS DE PROGRAMACIÓN
En este apartado se supone que el lector (programador) tiene algunos conocimientos de
programación y por lo tanto no se explican en profundidad los conceptos que aparecen.
Las estructuras de programación o estructuras de control permiten tomar
decisiones y realizar un proceso repetidas veces. Son los denominados bifurcaciones y bucles.
En la mayoría de los lenguajes de programación, este tipo de estructuras son comunes en
cuanto a concepto, aunque su sintaxis varía de un lenguaje a otro. La sintaxis de Java coincide
prácticamente con la utilizada en C/C++, lo que hace que para un programador de C/C++ no
suponga ninguna dificultad adicional.
RAG-INFOR | Por auxiliar de docencia: Ruben Ajata Guarahi
19
20 de diciembre de 2010
[ALGORITMOS Y LEGUAJES DE PROGRAMACIÓN]
10.1 Sentencias o expresiones
Una expresión es un conjunto variables unidos por operadores. Son órdenes que se le dan al
computador para que realice una tarea determinada.
Una sentencia es una expresión que acaba en punto y coma (;). Se permite incluir
varias sentencias en una línea, aunque lo habitual es utilizar una línea para cada sentencia. Por
ejemplo:
i = 0; j = 5; x = i + j;
// Línea compuesta de tres sentencias
Donde es igual al siguiente ejemplo:
i = 0;
j = 5;
x = i + j;
10.2 Comentarios
Existen dos formas diferentes de introducir comentarios entre el código de Java(en realidad
son tres, como pronto se verá). Son similares a la forma de realizar comentarios en el lenguaje
C++. Los comentarios son tremendamente útiles para poder entender el código utilizado,
facilitando de ese modo futuras revisiones y correcciones. Además permite que cualquier
persona distinta al programador original pueda comprender el código escrito de una forma
más rápida. Se recomienda acostumbrarse a comentar el código desarrollado. De esta forma se
simplifica también la tarea de estudio y revisión posteriores.
Java interpreta que todo lo que aparece a la derecha de dos barras “//” en una línea cualquiera
del código es un comentario del programador y no lo tiene en cuenta. El comentario puede
empezar al comienzo de la línea o a continuación de una instrucción que debe ser ejecutada. La
segunda forma de incluir comentarios consiste en escribir el texto entre los símbolos /*…*/.
Este segundo método es válido para comentar más de una línea de código. Por ejemplo:
// Esta línea es un comentario
int a=1; // Comentario a la derecha de una sentencia
// Esta es la forma de comentar más de una línea utilizando
// Las dos barras. Requiere incluir dos barras al comienzo de cada línea
/* Esta segunda forma es mucho más cómoda para comentar un número elevado de líneas ya
que sólo requiere modificar el comienzo y el final. */
En Java existe además una forma especial de introducir los comentarios (utilizando /**…*/
más algunos caracteres especiales) que permite generar automáticamente la documentación
sobre las clases y packages desarrollados por el programador. Una vez introducidos los
comentarios, el programa javadoc.exe (incluido en el JDK) genera de forma automática la
información de forma similar a la presentada en la propia documentación del JDK. La sintaxis
de estos comentarios y la forma de utilizar el programa javadoc.exe se puede encontrar en la
información que viene con el JDK.
RAG-INFOR | Por auxiliar de docencia: Ruben Ajata Guarahi
20
20 de diciembre de 2010
[ALGORITMOS Y LEGUAJES DE PROGRAMACIÓN]
10.3 Bifurcaciones
Las bifurcaciones permiten ejecutar una de entre varias acciones en función del valor de una
expresión lógica o relacional. Se tratan de estructuras muy importantes ya que son las
encargadas de controlar el flujo de ejecución de un programa. Existen dos bifurcaciones
diferentes: if y switch.
10.3.1 Bifurcación if
Esta estructura permite ejecutar un conjunto de sentencias en función del valor que tenga la
expresión de comparación (se ejecuta si la expresión de comparación tiene valor true). Tiene la
forma siguiente:
if (condición)
{
sentecias;
}
Ejemplo:
a) Dado un numero x verificar si es un numero positivo.
El código es:
class Positivo
{
public static void main (String args[])
{
int x = 10;
if (x > 0)
{
System.out.print (x+" Es positivo!!!");
}
}
}
Las llaves {} sirven para agrupar en un bloque las sentencias que se han de ejecutar, y no son
necesarias si sólo hay una sentencia dentro del if.
RAG-INFOR | Por auxiliar de docencia: Ruben Ajata Guarahi
21
20 de diciembre de 2010
[ALGORITMOS Y LEGUAJES DE PROGRAMACIÓN]
10.3.2 Bifurcación if else
Análoga a la anterior, de la cual es una ampliación. Las sentencias incluidas en el else se
ejecutan en el caso de no cumplirse la expresión de comparación (false).
if (condición)
{
sentecias1;
}
else
{
sentecias2;
}
Tomaremos en cuenta el ejercicio anterior
El código es:
class Positivo
{
public static void main (String args[])
{
int x = 10;
if (x > 0)
System.out.print (x+" Es positivo!!!");
else
System.out.print (x+" No es positivo!!!");
}
}
10.3.3 Bifurcación if else if else (anidación)
Permite introducir más de una expresión de comparación. Si la primera condición no se
cumple, se compara la segunda y así sucesivamente. En el caso de que no se cumpla ninguna de
las comparaciones se ejecutan las sentencias correspondientes al else.
RAG-INFOR | Por auxiliar de docencia: Ruben Ajata Guarahi
22
20 de diciembre de 2010
[ALGORITMOS Y LEGUAJES DE PROGRAMACIÓN]
if (condición1){
sentecias1;}
else
if (condición2) {
sentecias2;}
else
if (condición3) {
sentecias3;}
else {
sentecias4;}
Véase a continuación el siguiente ejemplo:
b) Dados dos números. Hallar la operación de la suma, resta, multiplicación y división.
El código es:
class Ejemplo
{
public static void main (String args[])
{
short a = 10, b = 2, op = 3;
if (op == 1){
System.out.print ("a+b = " + (a + b));}
else
if (op == 2){
System.out.print ("a-b = " + (a - b));}
else
if (op == 3){
System.out.print ("a*b = " + (a * b));}
RAG-INFOR | Por auxiliar de docencia: Ruben Ajata Guarahi
23
20 de diciembre de 2010
[ALGORITMOS Y LEGUAJES DE PROGRAMACIÓN]
else
if (op == 4){
System.out.print ("a/b = " + (a / b));}
else
{
System.out.print ("Error!!!");
}
}
}
10.3.4 Sentencia switch
Se trata de una alternativa a la bifurcación if else if else cuando se compara la misma
expresión con distintos valores. Su forma general es la siguiente:
switch (expresión)
{
case value1:
sentecias1;
break;
case value2:
sentecias2;
break;
case value3:
sentecias3;
break;
case value4:
sentecias4;
break;
default:
sentecias6;
}
Las características más relevantes de switch son las siguientes:
1. Cada sentencia case se corresponde con un único valor de expression. No se pueden
establecer rangos o condiciones sino que se debe comparar con valores concretos. El
ejemplo del Apartado 2.3.3.3 no se podría realizar utilizando switch.
2. Los valores no comprendidos en ninguna sentencia case se pueden gestionar en
default, que es opcional.
En ausencia de break, cuando se ejecuta una sentencia case se ejecutan también todas las case
que van a continúación, hasta que se llega a un break o hasta que se termina el switch.
Ejemplo 1:
A continuación veamos el ejercicio anterior
RAG-INFOR | Por auxiliar de docencia: Ruben Ajata Guarahi
24
20 de diciembre de 2010
[ALGORITMOS Y LEGUAJES DE PROGRAMACIÓN]
El código es:
class Ejemplo
{
public static void main (String args[])
{
short a = 10, b = 2, op = 3;
switch (op)
{
case 1:
System.out.print ("a+b = " + (a + b));
break;
case 2:
System.out.print ("a-b = " + (a - b));
break;
case 3:
System.out.print ("a*b = " + (a * b));
break;
case 4:
System.out.print ("a/b = " + (a / b));
break;
default:
System.out.print ("Error!!!");
}
}
}
RAG-INFOR | Por auxiliar de docencia: Ruben Ajata Guarahi
25
20 de diciembre de 2010
[ALGORITMOS Y LEGUAJES DE PROGRAMACIÓN]
Ejemplo 2:
class Ejemplo2
{
public static void main (String args[])
{
char c = (char) (Math.random () * 26 + 'a'); // Generación aleatoria
//de letras minúsculas
System.out.println ("La letra " + c);
switch (c)
{
case 'a': // Se compara con la letra a
case 'e': // Se compara con la letra e
case 'i': // Se compara con la letra i
case 'o': // Se compara con la letra o
case 'u': // Se compara con la letra u
System.out.println (" Es una vocal ");
break;
default:
System.out.println (" Es una consonante ");
}
}
}
10.4 Bucles
Un bucle se utiliza para realizar un proceso repetidas veces. Se denomina también lazo o loop.
El código incluido entre las llaves {} (opcionales si el proceso repetitivo consta de una sola
línea), se ejecutará mientras se cumpla unas determinadas condiciones. Hay que prestar
especial atención a los bucles infinitos, hecho que ocurre cuando la condición de finalizar el
bucle (condición) no se llega a cumplir nunca. Se trata de un fallo muy típico, habitual sobre
todo entre programadores poco experimentados.
10.4.1 Bucle while
Las sentencias sentecias se ejecutan mientras condición sea true.
while (condición)
{
sentecias;
}
RAG-INFOR | Por auxiliar de docencia: Ruben Ajata Guarahi
26
20 de diciembre de 2010
[ALGORITMOS Y LEGUAJES DE PROGRAMACIÓN]
Ejemplo:
a) Hallar el factorial de un numero N.
Código en Java
class EjemploWhile
{
public static void main (String args[])
{
int n = 5, f = 1, i = 1;
while (i <= n)
{
f = f * i;
i++;
}
System.out.print (n + "! = " + f);
}
}
Diagrama de flujo
10.4.2 Bucle for
La forma general del bucle for es la siguiente:
for (inicialización; condición; incremento)
{
sentecias;
}
Que es equivalente a utilizar while en la siguiente forma,
inicialización;
while (condición)
{
incremento;
sentencias;
}
La sentencia o sentencias inicialización se ejecuta al comienzo del for, e incrementoo después
de sentencias. La condición se evalúa al comienzo de cada iteración; el bucle termina cuando
la expresión de comparación toma el valor false. Cualquiera de las tres partes puede estar
vacía. La inicialización y el incremento pueden tener varias expresiones separadas por comas.
Inicialización y el incremento pueden tener varias expresiones separadas por comas.
RAG-INFOR | Por auxiliar de docencia: Ruben Ajata Guarahi
27
20 de diciembre de 2010
[ALGORITMOS Y LEGUAJES DE PROGRAMACIÓN]
Ejemplo. Veamos la diferencia entre un bucle for y while.
Códigos de ambos algoritmos
class EjemploFor
{
public static void main (String args[])
{
int n = 5, f = 1;
for (int i=1; i<=n; i++)
{
f = f * i;
}
System.out.print (n + "! = " + f);
}
}
class EjemploWhile
{
public static void main (String args[])
{
int n = 5, f = 1, i = 1;
while (i <= n)
{
f = f * i;
i++;
}
System.out.print (n + "! = " + f);
}
}
También tenemos otro ejemplo, el código situado a la izquierda produce la salida que aparece a
la derecha:
RAG-INFOR | Por auxiliar de docencia: Ruben Ajata Guarahi
28
20 de diciembre de 2010
[ALGORITMOS Y LEGUAJES DE PROGRAMACIÓN]
Código:
class Ejemplo
{
public static void main (String args[])
{
for (int i = 1, j = i + 10 ; i < 5 ; i++, j = 2 * i)
{
System.out.println (" i = " + i + " j = " + j);
}
}
}
Salida:
i = 1 j = 11
i=2j=4
i=3j=6
i=4j=8
10.4.3 Bucle do while
Es similar al bucle while pero con la particularidad de que el control está al final del bucle (lo
que hace que el bucle se ejecute al menos una vez, independientemente de que la condición se
cumpla o no). Una vez ejecutados los sentencias, se evalúa la condición: si resulta true se
vuelven a ejecutar las sentencias incluidas en el bucle, mientras que si la condición se evalúa a
false finaliza el bucle. Este tipo de bucles se utiliza con frecuencia para controlar la satisfacción
de una determinada condición de error o de convergencia.
do
{
sentencias;
}
while (condición);
Ejemplo:
a) Hallar el factorial de un numero N.
El código es:
Código en Java
class EjemploWhile
{
public static void main (String args[])
{
int n = 5, f = 1, i = 1;
do
{
f = f * i;
i++;
}
while (i <= n);
System.out.print (n + "! = " + f);
}
}
RAG-INFOR | Por auxiliar de docencia: Ruben Ajata Guarahi
Diagrama de flujo
29
20 de diciembre de 2010
[ALGORITMOS Y LEGUAJES DE PROGRAMACIÓN]
10.4.4 Sentencias break y continúa
La sentencia break es válida tanto para las bifurcaciones como para los bucles. Hace que se
salga inmediatamente del bucle o bloque que se está ejecutando, sin sin realizar la ejecución
del resto de las sentencias.
La sentencia continúa se utiliza en los bucles (no en bifurcaciones). Finaliza la iteración “i” que
en ese momento se está ejecutando (no ejecuta el resto de sentencias que hubiera hasta el final
del bucle). Vuelve al comienzo del bucle y comienza la siguiente iteración (i+1).
10.4.5 Sentencias break y continúa con etiquetas
Las etiquetas permiten indicar un lugar donde continúar la ejecución de un programa después
de un break o continúa. El único lugar donde se pueden incluir etiquetas es justo delante de
un bloque de código entre llaves {} (if, switch, do…while, while y for) y sólo se deben utilizar
cuando se tiene uno o más bucles (o bloques) dentro de otro bucle y se desea salir (break) o
continúar con la siguiente iteración (continúa) de un bucle que no es el actual.
Por tanto, la sentencia break labelName finaliza el bloque que se encuentre a
continúación de labelName. Por ejemplo, en las sentencias,
class Ejemplo
{
public static void main (String args[])
{
bucleI: // etiqueta o label
for (int i = 0, j = 0 ; i < 100 ; i++)
{
while (true)
{
if ((++j) > 5)
{
break bucleI;
} // Finaliza ambos bucles
else
{
break;
} // Finaliza el bucle interior
}
}
}
}
La expresión break bucleI; finaliza los dos bucles simultáneamente, mientras que la expresión
break; sale del bucle while interior y seguiría con el bucle for en i. Con los valores presentados
ambos bucles finalizarán con i = 5 y j = 6 (se invita al lector a comprobarlo).
La sentencia continúa (siempre dentro de al menos un bucle) permite transferir el
control a un bucle con nombre o etiqueta. Por ejemplo, la sentencia,
RAG-INFOR | Por auxiliar de docencia: Ruben Ajata Guarahi
30
20 de diciembre de 2010
[ALGORITMOS Y LEGUAJES DE PROGRAMACIÓN]
continue bucle1;
Transfiere el control al bucle for que comienza después de la etiqueta bucle1: para que realice
una nueva iteración, como por ejemplo:
class Ejemplo
{
public static void main (String args[])
{
int n = 5, m = 5;
bucle1:
for (int i = 0 ; i < n ; i++)
{
bucle2:
for (int j = 0 ; j < m ; j++)
{
if (j < 5)
continue bucle1;
else
continue bucle2;
}
}
}
}
10.4.6 Sentencia return
Otra forma de salir de un bucle (y de un método) es utilizar la sentencia return. A diferencia de
continúa o break, la sentencia return sale también del método o función. En el caso de que la
función devuelva alguna variable, este valor se deberá poner a continúación del return (return
value;).
10.4.7 Bloque try {...} catch {...} finally {...}
Java incorpora en el propio lenguaje la gestión de errores. El mejor momento para detectar los
errores es durante la compilación. Sin embargo prácticamente sólo los errores de sintaxis son
detectados en esta operación. El resto de problemas surgen durante la ejecución de los
programas.
En el lenguaje Java, una Exception es un cierto tipo de error o una condición anormal que se ha
producido durante la ejecución de un programa. Algunas excepciones son fatales y provocan
que se deba finalizar la ejecución del programa. En este caso conviene terminar
ordenadamente y dar un mensaje explicando el tipo de error que se ha producido. Otras
excepciones, como por ejemplo no encontrar un fichero en el que hay que leer o escribir algo,
pueden ser recuperables. En este caso el programa debe dar al usuario la oportunidad de
corregir el error (definiendo por ejemplo un nuevo path del fichero no encontrado).
RAG-INFOR | Por auxiliar de docencia: Ruben Ajata Guarahi
31
20 de diciembre de 2010
[ALGORITMOS Y LEGUAJES DE PROGRAMACIÓN]
10.4.7.1 try y catch
El control de las excepciones se realiza mediante las sentencias try y catch. La sintaxis es:
try
{
//instrucciones que se ejecutan salvo que haya un error
}
catch (ClaseExcepción objetoQueCapturaLaExcepcion)
{
//instrucciones que se ejecutan si hay un error
}
Puede haber más de una sentencia catch para un mismo bloque try.
Ejemplo:
import javax.swing.JOptionPane;
class ejer
{
public static void main (String args[])
{
int x;
try
{
x = Integer.parseInt (JOptionPane.showInputDialog ("Escriba un número"));
}
catch (NumberFormatException e)
{
JOptionPane.showMessageDialog (null, "El número no es válido");
}
}
}
Dentro del bloque try se colocan las instrucciones susceptibles de provocar una excepción, el
bloque catch sirve para capturar esa excepción y evitar el fin de la ejecución del programa.
Desde el bloque catch se maneja, en definitiva, la excepción.
Cada catch maneja un tipo de excepción. Cuando se produce una excepción, se busca el catch
que posea el manejador de excepción adecuado, será el que utilice el mismo tipo de excepción
que se ha producido. Esto puede causar problemas si no se tiene cuidado, ya que la clase
Exception es la superclase de todas las demás. Por lo que si se produjo, por ejemplo, una
excepción de tipo AritmethicException y el primer catch captura el tipo genérico Exception,
será ese catch el que se ejecute y no los demás.
Por eso el último catch debe ser el que capture excepciones genéricas y los primeros deben
ser los más específicos. Lógicamente si vamos a tratar a todas las excepciones (sean del tipo
que sean) igual, entonces basta con un solo catch que capture objetos Exception.
RAG-INFOR | Por auxiliar de docencia: Ruben Ajata Guarahi
32
20 de diciembre de 2010
[ALGORITMOS Y LEGUAJES DE PROGRAMACIÓN]
10.4.7.2 throws
Al llamar a métodos, ocurre un problema con las excepciones. El problema es, si el método da
lugar a una excepción, ¿quién la maneja? ¿El propio método?¿O el código que hizo la llamada
al método?
Con lo visto hasta ahora, sería el propio método quien se encargara de sus excepciones, pero
esto complica el código ya que descentraliza el control de excepciones y dificulta el
mantenimiento del código. Por eso otra posibilidad es hacer que la excepción la maneje el
código que hizo la llamada.
Esto se hace añadiendo la palabra throws tras la primera línea de un método. Tras esa
palabra se indica qué excepciones puede provocar el código del método. Si ocurre una
excepción en el método, el código abandona ese método y regresa al código desde el que se
llamó al método. Allí se posará en el catch apropiado para esa excepción. Ejemplo:
void usarArchivo (String archivo) throws IOException, InterruptedException
{
// Instrucciones que se ejecutan
}
En este caso se está indicando que el método usarArchivo puede provocar excepciones del
tipo IOException y InterruptedException. Lo cual obliga a que el código que invoque a este
método deba preparar el (o los) catch correspondientes. Cuando un método hace uso de
throws, en el javadoc del mismo se documenta de esta forma:
void usarArchivo (String archivo) throws IOException, InterruptedException
{
// Instrucciones
}
Para utilizar el método:
try
{
//...
objeto.usarArchivo("C:\texto.txt");
//...
//puede haber excepción
}
catch(IOException ioe)
{
//...
}
catch(InterruptedException ie)
{
//...
}
10.4.7.3 throw
Esta instrucción nos permite provocar a nosotros una excepción (o lo que es lo mismo, crear
artificialmente nosotros las excepciones). Ante:
RAG-INFOR | Por auxiliar de docencia: Ruben Ajata Guarahi
33
20 de diciembre de 2010
[ALGORITMOS Y LEGUAJES DE PROGRAMACIÓN]
throw new Exception();
El flujo del programa se dirigirá a la instrucción try…catch más cercana. Se pueden utilizar
constructores en esta llamada (el formato de los constructores depende de la clase que se
utilice):
throw new Exception(“Error grave, grave”);
Eso construye una excepción con el mensaje indicado.
throw permite también relanzar excepciones. Esto significa que dentro de un catch podemos
colocar una instrucción throw para lanzar la nueva excepción que será capturada por el catch
correspondiente:
try
{
//. . .
}
catch (ArrayIndexOutOfBoundsException exc)
{
throw new IOException ();
}
catch (IOException)
{
//. . .
}
El segundo catch capturará también las excepciones del primer tipo.
10.4.7.4 finally
La cláusula finally está pensada para limpiar el código en caso de excepción. Su uso es:
try {
//...
}
catch (FileNotFoundException fnfe)
{
//...
}
catch(IOException ioe)
{
//...
}
catch(Exception e)
{
//...
}
finally {
//Instrucciones de limpieza
}
RAG-INFOR | Por auxiliar de docencia: Ruben Ajata Guarahi
34
20 de diciembre de 2010
[ALGORITMOS Y LEGUAJES DE PROGRAMACIÓN]
Las sentencias finally se ejecutan tras haberse ejecutado el catch correspondiente. Si ningún
catch capturó la excepción, entonces se ejecutarán esas sentencias antes de devolver el
control al siguiente nivel o antes de romperse la ejecución.
Hay que tener muy en cuenta que las sentencias finally se ejecutan independientemente
de si hubo o no excepción. Es decir esas sentencias se ejecutan siempre, haya o no
excepción. Son sentencias a ejecutarse en todo momento. Por ello se coloca en el bloque
finally código común para todas las excepciones (y también para cuando no hay excepciones.
Ejemplo completo con try, catch y finally
import javax.swing.JOptionPane;
class ejer
{
public static void main (String args[])
{
int x;
try
{
x = Integer.parseInt (JOptionPane.showInputDialog ("Escriba un número"));
}
catch (NumberFormatException e)
{
JOptionPane.showMessageDialog (null, "El número no es válido");
}
catch (Exception e)
{
JOptionPane.showMessageDialog (null, "Error indeterminado");
}
finally
{
JOptionPane.showMessageDialog (null, "El proceso termino");
}
}
}
RAG-INFOR | Por auxiliar de docencia: Ruben Ajata Guarahi
35
20 de diciembre de 2010
[ALGORITMOS Y LEGUAJES DE PROGRAMACIÓN]
11 ARRAYS
11.1 Arrays unidimecionales
Un array es una colección de valores de un mismo tipo engrosados en la misma variable. De
forma que se puede acceder a cada valor independientemente. Para Java además un array es
un objeto que tiene propiedades que se pueden manipular.
Los arrays solucionan problemas concernientes al manejo de muchas variables que se
refieren a datos similares. Por ejemplo si tuviéramos la necesidad de almacenar las
notas de una clase con 18 alumnos, necesitaríamos 18 variables, con la tremenda lentitud de
manejo que supone eso. Solamente calcular la nota media requeriría una tremenda línea de
código. Almacenar las notas supondría al menos 18 líneas de código.
Gracias a los arrays se puede crear un conjunto de variables con el mismo nombre.
La diferencia será que un número (índice del array) distinguirá a cada variable.
En el caso de las notas, se puede crear un array llamado notas, que representa a todas las
notas de la clase. Para poner la nota del primer alumno se usaría notas[0], el segundo sería
notas[1], etc. O de donde nos convenga empezar. (Los corchetes permiten especificar el índice
en concreto del array).
La declaración de un array unidimensional se hace con esta sintaxis.
tipo nombre[];
Ejemplo:
double precio[];
//Declara un array que almacenará valores doubles
Declara un array de tipo double. Esta declaración indica para qué servirá el array, pero no
reserva espacio en la RAM al no saberse todavía el tamaño del mismo.
Tras la declaración del array, se tiene que iniciar. Eso lo realiza el operador new, que es el que
realmente crea el array indicando un tamaño. Cuando se usa new es cuando se reserva el
espacio necesario en memoria. Un array no inicializado es un array null. Ejemplo:
int notas[];
//sería válido también int[] notas;
// donde el array notas es null
notas = new int[10]; //indica que el array constará de diez valores de tipo int
También se puede hacer todo a la vez como se verá a continuación:
int notas[]=new int[10];
En el ejemplo anterior se crea un array de diez enteros (con los tipos básicos se crea en
memoria el array y se inicializan los valores, los números se inician a 0).
Los valores del array se asignan utilizando el índice del mismo entre corchetes:
notas[2]=8;
// el numero 8 se asigna en la posición 2 del array
RAG-INFOR | Por auxiliar de docencia: Ruben Ajata Guarahi
36
20 de diciembre de 2010
[ALGORITMOS Y LEGUAJES DE PROGRAMACIÓN]
También se pueden asignar valores al array en la propia declaración:
int notas1[] = {8, 7, 9};
int notas2[]= new int[] {8,7,9};
//Equivalente a la anterior
Esto declara e inicializa un array de tres elementos. En el ejemplo lo que significa es que:
notas[0] = 8
notas[1] = 7
notas[2] = 9
En Java (como en otros lenguajes) el primer elemento de un array es el cero. El primer
elemento del array notas, es notas[0]. Se pueden declarar arrays a cualquier tipo de datos
(enteros, booleanos, doubles, etc. e incluso objetos denominados array de objetos).
La ventaja de usar arrays (volviendo al caso de las notas) es que gracias a un simple bucle for
se puede rellenar o leer fácilmente todos los elementos de un array como veremos en el
siguiente ejemplo:
a) Calcular el promedio de 10 notas
class vector
{
public static void main (String args[])
{
int suma = 0;
int notas[] = new int [10];
for (int i = 0 ; i < 10 ; i++)
notas [i] = Leer.datoInt ();
for (int i = 0 ; i < 10 ; i++)
suma += notas [i];
System.out.println ("Promedio = " + (suma / 10));
}
}
A un array se le puede inicializar las veces que haga falta:
int notas[]=new int [5];
// declaramos un array de 5 valores
notas[]=new notas[20];
// inicializamos el mismo array pero de 20 valores
notas=new notas[100]; // nuevamente inicializamos el mismo array pero de 100 valores
Pero hay que tener en cuenta que el segundo new y el tercer new hacen que se pierda el
contenido anterior. Realmente un array es una referencia a valores que se almacenan en
memoria mediante el operador new, si el operador new se utiliza en la misma referencia, el
anterior contenido se queda sin referencia y, por lo tanto se pierde, a eso lo llamamos basura
digital. Un array se puede asignar a otro array (si son del mismo tipo):
RAG-INFOR | Por auxiliar de docencia: Ruben Ajata Guarahi
37
20 de diciembre de 2010
[ALGORITMOS Y LEGUAJES DE PROGRAMACIÓN]
int notas[];
int ejemplo[]=new int[18];
notas=ejemplo;
En el último punto, notas equivale a ejemplo. Esta asignación provoca que cualquier cambio
en notas también cambie el array ejemplos. Es decir esta asignación anterior, no copia los
valores del array, sino que notas y ejemplo son referencias al mismo array. Ejemplo:
int notas[]={3,3,3}; // declaramos el array notas de tres campos y tres elementos
int ejemplo[]=notas;
// declaramos el array ejemplo y copiamos el array notas
ejemplo= notas;
// es la misma que: int ejemplo[]=notas;
ejemplo[0]=8;
System.out.println(notas[0]); //Escribirá el número 8
11.2 arrays multidimensionales
Los arrays además pueden tener varias dimensiones. Entonces se habla de arrays de
arrays (arrays que contienen arrays) Ejemplo:
int notas[][];
notas es un array que contiene arrays de enteros
notas = new int[3][5]; //notas está compuesto por 3 arrays de 5 enteros cada uno
//ó lo que llamamos un matriz de 3 filas y 5 columnas
notas[0][0]=9;
// el primer valor de notas[0][0] es 9
Forma física:
Puede haber más dimensiones incluso (notas[3][2][7]). Los arrays multidimensionales se
pueden inicializar de forma más creativa incluso. Ejemplo:
int notas[][]=new int[5][];
notas[0]=new int[2];
notas[1]=new int[5];
notas[2]=new int[4];
notas[3]=new int[1];
notas[4]=new int[3];
//Hay 5 arrays de enteros
//El primer array es de 2 enteros
//El segundo de 5
Forma física:
RAG-INFOR | Por auxiliar de docencia: Ruben Ajata Guarahi
38
20 de diciembre de 2010
[ALGORITMOS Y LEGUAJES DE PROGRAMACIÓN]
Hay que tener en cuenta que en el ejemplo anterior, notas[0] es un array de 2 enteros.
Mientras que notas, es un array de 5 arrays de enteros.
Se pueden utilizar más de dos dimensiones si es necesario.
11.3 Longitud de un array
Los arrays poseen un método que permite determinar cuánto mide un array. Se trata de
length. Ejemplo (continuando del anterior ejemplo):
System.out.println(notas.length);
//equivale a 5
System.out.println(notas[2].length); //equivale a 4
11.4 La clase Arrays
En el paquete java.utils se encuentra una clase estática llamada Arrays. Una clase estática
permite ser utilizada como si fuera un objeto (como ocurre con Math). Esta clase posee
métodos muy interesantes para utilizar sobre arrays.
Su uso es:
Arrays.método(argumentos);
11.5 fill
Permite rellenar todo un array unidimensional con un determinado valor. Sus argumentos son
el array a rellenar y el valor deseado:
int valores[]=new int[23];
Arrays.fill(valores, -1);
//Todo el array llenó de -1
También permite decidir desde que índice hasta qué índice rellenamos:
int valores[]=new int[23];
Arrays.fill(valores, 5,8-1); //Del elemento 5 al 7 valdrán -1
11.6 equals
Compara dos arrays y devuelve true si son iguales. Se consideran iguales si son del mismo
tipo, tamaño y contienen los mismos valores.
int ejemplo1[]=new int[10];
int ejemplo2[]=new int[20];
System.out.print (ejemplo1.equals (ejemplo2)); // en esta caso nos escribe false
11.7 sort
Permite ordenar un array en orden ascendente. Se pueden ordenar sólo una serie de
elementos desde un determinado punto hasta un determinado punto.
RAG-INFOR | Por auxiliar de docencia: Ruben Ajata Guarahi
39
20 de diciembre de 2010
[ALGORITMOS Y LEGUAJES DE PROGRAMACIÓN]
int x[]={4, 5, 2, 3, 7, 8, 2, 3, 9, 5};
Arrays.sort(x);
// Ordena todos los elementos del array
Arrays.sort(x,2,5);
//Ordena del 2º al 4º elemento del array
11.8 binarySearch
Permite buscar un elemento de forma ultrarrápida en un array ordenado (en un array
desordenado sus resultados son impredecibles). Devuelve el índice ó la posición en el que está
colocado el elemento. Ejemplo:
int x[]={4, 5, 2, 0, 1, 8, 2, 3, 9, 5};
Arrays.sort(x);
System.out.println(Arrays.binarySearch(x,3));
// Nos devuelve 4
11.9 El método System.arraysCopy
La clase System también posee un método relacionado con los arrays, dicho método permite
copiar un array en otro. Recibe cinco argumentos: el array que se copia, el índice desde que se
empieza a copia en el origen, el array destino de la copia, el índice desde el que se copia en el
destino, y el tamaño de la copia (número de elementos de la copia).
int uno[]={1, 1, 2};
int dos[]={3, 3, 3, 3, 3, 3, 3, 3, 3};
System.arraycopy(uno, 0, dos, 0, uno.length);
// en este caso uno siempre tiene que //se
menor que dos
for (int i=0; i<=8; i++)
{
System.out.print(dos[i]+" "); // escribirá 112333333
}
Uno de los casos que podemos apreciar es la copia desde que posición empezar, así como
veremos a continuación:
int uno[]={1, 1, 2};
int dos[]={3, 3, 3, 3, 3, 3, 3, 3, 3};
System.arraycopy(uno, 0, dos, 2, uno.length);
// en este caso copiamos a partir de la
//posición 2 del array dos
for (int i=0; i<=8; i++)
{
System.out.print(dos[i]+" "); // escribirá 331123333
}
12 CADENAS
Para Java las cadenas de texto son objetos especiales. Los textos deben manejarse creando
objetos de tipo String. Ejemplo:
String texto1 = “¡Prueba de texto!”;
RAG-INFOR | Por auxiliar de docencia: Ruben Ajata Guarahi
40
20 de diciembre de 2010
[ALGORITMOS Y LEGUAJES DE PROGRAMACIÓN]
Las cadenas pueden ocupar varias líneas utilizando el operador de concatenación “+”.
String texto2 =”Este es un texto que ocupa “+“varias líneas, no obstante se puede “+
“perfectamente encadenar”;
También se pueden crear objetos String sin utilizar constantes entrecomilladas, usando otros
constructores:
char[] caracteres = {‘P’,’a’,’l’,’a’,’b’,’r’,’a’};
//Array de caracteres
String cadena = new String(caracteres);
byte[] datos = {97,98,99};
String codificada = new String (datos, “8859_1”);
En el último ejemplo la cadena codificada se crea desde un array de tipo byte que contiene
números que serán interpretados como códigos Unicode. Al asignar, el valor
8859_1 indica la tabla de códigos a utilizar.
12.1 Comparación entre cadenas
12.1.1 equals
Es la que compara la cadena1 con la cadena2, donde su devolución será true si ambas son
iguales, caso contrario su devolución será false.
Ejemplo 1:
String cadena1 = "ana", cadena2 = "ana";
if (cadena1.equals (cadena2))
// equivale a true
System.out.print (“Son iguales”);
Ejemplo 2:
String cadena1 = "ana", cadena2 = "ANA";
if (!cadena1.equals (cadena2))
// equivale a false
System.out.print (“Son diferentes”);
En este caso se tienen en cuenta las cadenas mayúsculas y minúsculas por tal razón es que nos
escribe false en el ejemplo 2.
12.1.2 equalsIgnoreCase
Como en el anterior caso, pero en este no se tienen en cuenta las cadenas mayúsculas y
minúsculas.
String cadena1 = "ana", cadena2 = “ANA";
if (cadena1.equalsIgnoreCase (cadena2))
System.out.print (“Son iguales”);
// equivale a true
RAG-INFOR | Por auxiliar de docencia: Ruben Ajata Guarahi
41
20 de diciembre de 2010
[ALGORITMOS Y LEGUAJES DE PROGRAMACIÓN]
12.1.3 compareTo
Compara ambas cadenas, considerando el orden alfabético. Si la cadena1 es mayor en orden
alfabético que la cadena2 devuelve 1, si son iguales devuelve 0 y si la cadena2 es mayor a la
cadena1 devuelve -1. Hay que tener en cuenta que el orden no es el del alfabeto español, sino
que usa la tabla ASCII, en esa tabla la letra ñ es mucho mayor que la o.
String cadena1 = "PEPE", cadena2 = “pepe";
if(cadena2.compareTo (cadena1)>0)
// equivalente a 1
System.out.print (“cadena1 es mayor a cadena2”);
12.1.4 compareToIgnoreCase
Cumple la misma función que el anterior caso, pero en esta ignora las mayúsculas ó sin tener
en cuenta las cadenas mayúsculas con las minúsculas.
String cadena1 = "PEPE", cadena2 = “pepe";
if(cadena2.compareToIgnoreCase (cadena1)==0)
// equivalente a 0
System.out.print (“cadena1 es igual a cadena2”);
12.2 Métodos de conversiones.
12.2.1 String.valueOf
Convierte un tipo byte, short, int, long, double, float ó Date en una cadena.
double n = 24.5;
String cadena = String.valueOf (n);
System.out.print (cadena);
String fecha = String.valueOf (new Date ());
System.out.print (fecha);
12.2.2 parse
Convierte una cadena numérica en un dato numérico de tipo byte, short, int, long, double y
float.
String cadena = "256";
int n = Integer.parseInt (cadena);
System.out.println (n);
12.2.3 new tipodato (cadena). tipodato Value ()
Como en el anterior caso convierte una cadena numérica en un dato numérico de tipo byte,
short, int, long, double y float.
String cadena = "256.25";
float n = new Float (cadena).floatValue ();
System.out.println (n);
RAG-INFOR | Por auxiliar de docencia: Ruben Ajata Guarahi
42
20 de diciembre de 2010
[ALGORITMOS Y LEGUAJES DE PROGRAMACIÓN]
12.2.4 toUpperCase
Es el método que convierte una cadena minúscula a una cadena mayúscula.
String cadena = "e.i.s.p.d.m.";
System.out.print (cadena.toUpperCase ());
// Escribirá E.I.S.P.D.M.
12.2.5 toLowerCase
Es el método que convierte una cadena mayúscula a una cadena minúscula.
String cadena = "INFORMATICA";
System.out.print (cadena.toLowerCase ());
// Escribirá informatica
12.2.6 toString
Convierte un carácter a una cadena.
char car = 'a';
String cad = Character.toString (car); // converte char a String
System.out.print (cad);
// Escribe a como tipo String
12.3 Métodos de concatenación
12.3.1 concat
Es el método que concatena cadenas.
String cadena1 = "Infor", cadena2 = "matica";
System.out.println (cadena1.concat (cadena2));
// Escribirá Informatica
12.3.2 Operador (+)
Con este operador aritmético también podemos concatenar cadenas, como así también
caracteres.
String cadena1 = "Infor", cadena2 = "matica";
System.out.println (cadena1 + cadena2);
// Escribirá Informatica
System.out.println(cadena1 +’m’ + ’a’);
// Escribirá Informa
12.4 Otros métodos.
12.4.1 length
Es la que determina la longitud o el tamaño de la cadena (el numero de caracteres de la
cadena).
String cadena = "informatica";
System.out.print (cadena.length ()); // Escribirá 11
RAG-INFOR | Por auxiliar de docencia: Ruben Ajata Guarahi
43
20 de diciembre de 2010
[ALGORITMOS Y LEGUAJES DE PROGRAMACIÓN]
12.4.2charAt
Es el método que extrae un carácter de la cadena. El carácter a devolver se indica por su
posición (el primer carácter es la posición 0) Si la posición es negativa o sobrepasa el tamaño
de la cadena, ocurre un error de ejecución, una excepción tipo IndexOutOfBoundsException.
String cadena = "bolivar";
System.out.print (cadena.charAt (3)); // Escribirá i
12.4.3 substring
Es el que obtiene porción del texto de la cadena (sub cadena). La porción se toma desde una
posición inicial hasta una posición final (sin incluir esa posición final). Si las posiciones
indicadas no son válidas ocurre una excepción de tipo IndexOutOfBounds-Exception. Se
empieza a contar desde la posición 0.
String cadena = "que tenga buen dia";
System.out.print (cadena.substring (10, 18)); // escribirá buen dia
12.4.4 replace
Es el que reemplaza un carácter ‘y’ por otro carácter ‘x’ en una cadena y lo almacena como
resultado. La cadena original no se cambia, por lo que hay que asignar el resultado de replace
a un String para almacenar la cadena cambiada.
String cadena = "matematica";
System.out.print (cadena.replace (‘a’, ‘o’));
// escribirá motemotico
12.4.5 replaceAll
Modifica en un texto cada entrada de una cadena por otra y devuelve el resultado. El primer
parámetro es el texto que se busca (que puede ser una expresión regular), el segundo
parámetro es el texto con el que se reemplaza el buscado. La cadena original no se modifica.
String cadena = "sumamente matematico";
System.out.print (cadena.replaceAll ("ma", "mo")); // escribe sumomente motemotico
12.4.6 replaceFirst
Cambia la primera aparición de la sub cadena ma por la sub cadena mo, así como se ve en el
ejemplo siguiente.
String cadena = "sumamente matematico";
System.out.print (cadena.replaceFirst ("ma", "mo")); //escribe sumomente matematico
RAG-INFOR | Por auxiliar de docencia: Ruben Ajata Guarahi
44
20 de diciembre de 2010
[ALGORITMOS Y LEGUAJES DE PROGRAMACIÓN]
12.4.7 indexOf
Devuelve la primera posición en la que aparece un determinado texto en la cadena. En el caso
de que el texto buscado no se encuentre, devuelve -1. El texto a buscar puede ser char o
String.
String cadena = "Ser excelente es comprender q la vida no es algo q se nos da hecha";
System.out.println (cadena.indexOf ("es")); //Escribe 14
Se puede buscar desde una determinada posición. En el ejemplo anterior:
System.out.println (cadena.indexOf ("es",15));
//Escribe 41
12.4.8 lastIndexOf
Devuelve la última posición en la que aparece un determinado texto en la cadena. Es casi
idéntica a la anterior, sólo que busca desde el final.
String cadena = "Ser excelente es comprender q la vida no es algo q se nos da hecha";
System.out.println (cadena.lastIndexOf ("es"));
//Escribe 41
También permite comenzar a buscar desde una determinada posición.
System.out.println (cadena.lastIndexOf ("es",14));
//Escribe 14
12.4.9 endsWith
Devuelve true si la cadena termina con un determinado texto.
String cadena = "Ser excelente es comprender q la vida no es algo q se nos da hecha";
System.out.println (cadena. endsWith ("hecha"));
//Escribe true
12.4.10 startsWith
Devuelve true si la cadena empieza con un determinado texto.
String cadena = "Ser excelente es comprender q la vida no es algo q se nos da hecha";
System.out.println (cadena. startsWith ("Ser"));
//Escribe true
12.4.11 trim
Elimina los blancos que tenga la cadena tanto por delante como por detrás
String cadena = " programación ";
System.out.println (cadena. trim ()); //Escribe eliminando blancos
12.4.12 toCharArray
Obtiene un array de caracteres a partir de una cadena.
String cadena = "sumamente matematico";
char car[] = cadena.toCharArray ();
for (int i = 0 ; i <= cadena.length () - 1 ; i++)
System.out.println (car [i]);
RAG-INFOR | Por auxiliar de docencia: Ruben Ajata Guarahi
45
20 de diciembre de 2010
[ALGORITMOS Y LEGUAJES DE PROGRAMACIÓN]
13 CARACTERES
13.1 isDigit
Determina si es un carácter de tipo numérico (digito). Devuelve true si es verdad caso
contrario false.
char car = '1';
if (Character.isDigit (car))
// equivale a true
System.out.println ("Es Digito");
13.2 isLetter
Determina si es un carácter de tipo alfabético (letra). Devuelve true si es verdad caso
contrario false.
char car = 'a';
if (Character.isLetter (car)) // equivale a true
System.out.println ("Es Letra");
13.3 isSpace
Determina si es espacio. Devuelve true si es verdad caso contrario false.
char car = ' ';
if (Character.isSpace (car)) // equivale a true
System.out.println ("Es Espacio");
13.4 isLowerCase
Determina si es un carácter minúsculo. Devuelve true si es verdad caso contrario false.
char car = 'a';
if (Character.isLowerCase (car))
// equivale a true
System.out.println ("Es Minusculo");
13.5 isUpperCase
Determina si es un carácter mayúsculo. Devuelve true si es verdad caso contrario false.
char car = 'A';
if (Character.isUpperCase (car))
// equivale a true
System.out.println ("Es Mayusculo");
RAG-INFOR | Por auxiliar de docencia: Ruben Ajata Guarahi
46