Documentos de Académico
Documentos de Profesional
Documentos de Cultura
“DAVID AUSUBEL”
SEMIPRESENCIAL
TECNOLOGÍA EN INFORMÁTICA
GUÍA DIDÁCTICA
ALGORITMOS
COMPILACIÓN: NIVEL
QUITO - ECUADOR
ÍNDICE
UNIDAD 1: INTRODUCCIÓN
2.1 Comentarios.
2.2 Identificadores.
2.3 Variables.
2.4 Constantes.
2.5 Contadores.
2.6 Acumuladores.
2.7 Palabras reservadas (primitivas).
2.8 Funciones matemáticas.
2.9 Tipos de datos.
2.10 Operadores.
2.11 Expresiones.
2.12 Procesos.
2.13 Interactividad.
2.14 Procedimientos.
UNIDAD 4: JAVA
i
4.7 Comentarios.
4.8 Tipos de datos.
4.9 Identificadores.
4.10 Declaración de variables.
4.11 Operadores.
4.12 Constantes.
4.13 Secuencias de Escape.
4.14 Entrada/Salida.
4.15 Esructuras de Control.
4.16 Vectores.
4.17 Ejercicios.
ii
UNIDAD 1
INTRODUCCIÓN
1.1 VISIÓN HISTÓRICA
La rama del saber que mayor utilización ha hecho del enfoque algorítmico es la
matemática. Durante miles de años el ser humano se ha esforzado por abstraer la estructura
de la solución de problemas con el fin de determinar claramente cuál es el camino seguro,
preciso y rápido que lleva a esas soluciones.
Son abundantes los ejemplos: máximo común divisor, teorema de Pitágoras, áreas de
figuras geométricas, división, suma de números fraccionarios, etc. Todos estos algoritmos
matemáticos independizan los datos iniciales del problema de la estructura de su solución,
lo que permite su aplicación con diferentes conjuntos de datos iniciales (variables).
En el ámbito de la computación, los Algoritmos son una herramienta que permite describir
claramente un conjunto finito de instrucciones, ordenadas secuencialmente y libres de
ambigüedad, que debe llevar a cabo un computador para lograr un resultado previsible.
Vale la pena recordar que un programa de computador consiste de una serie de
instrucciones muy precisas y escritas en un lenguaje de programación que el computador
entiende (Java, C, C++, etc.).
1
Ejemplo 1.1: Un procedimiento que se realiza varias veces al día consiste en lavarse los
dientes. La siguiente sería la forma de expresar este procedimiento como un algoritmo:
Ejemplo 1.2: El ejemplo de cambiar una bombilla (foco) fundida es uno de los más
utilizados por su sencillez para mostrar los pasos de un algoritmo:
1. Ubicar una escalera debajo de la bombilla fundida.
2. Tomar una bombilla nueva.
3. Subir por la escalera.
4. Girar la bombilla fundida hacia la izquierda hasta soltarla.
5. Enroscar la bombilla nueva en el plafón hasta apretarla.
6. Bajar de la escalera.
7. Fin.
Comprensible: Debe ser claro lo que hace, de forma que quien ejecute los pasos
(ser humano o máquina) sepa qué, cómo y cuándo hacerlo. Debe existir un
procedimiento que determine el proceso de ejecución.
Un aspecto muy importante sobre el cual las personas deben reflexionar es la ambigüedad
del lenguaje natural que se utiliza para comunicarse diariamente con sus semejantes. Los
algoritmos no admiten ningún tipo de ambigüedad ya que los lenguajes de programación
tienen un vocabulario restringido y preciso. Esto exige la utilización de un conjunto
determinado de palabras, mandos o primitivas en cualquiera de los procedimientos que se
elaboren.
2
Actividad 1.1: Discutir en grupo el ejemplo de la bombilla y proponer algunas mejoras.
Luego, un voluntario debe pasar al tablero para escribir el algoritmo con participación de
toda la clase.
Una diferencia notoria entre un algoritmo y un programa es que el algoritmo incorpora las
características estructurales básicas de la computación, independientemente de los detalles
de su implementación; mientras que un programa tiene un conjunto específico de detalles
para resolver un problema. Se puede observar que una técnica de solución (correspondiente
al algoritmo) se puede utilizar en diferentes situaciones problemáticas (correspondiente a
los programas).
Los Algoritmos se pueden expresar de muchas maneras, pero se puede decir que las dos
formas más importantes son: Seudocódigo y Diagrama de Flujo.
En Seudocódigo, la secuencia de instrucciones se representa por medio de frases o
proposiciones, mientras que en un Diagrama de Flujo, se representa por medio de
gráficos.
Ejemplo 1.3: Elaborar un Algoritmo para calcular el área de cualquier triángulo rectángulo
y presentar el resultado en pantalla.
Seudocódigo:
1. Inicio
2. Asignar el número 2 a la constante "Div"
3. Conocer la base del triángulo y guardarla en la variable "Base"
4. Conocer la altura del triángulo y guardarla en la variable "Altura"
5. Guardar en la variable "Area" el valor de multiplicar "Base" por "Altura"
6. Guardar en la variable "Area" el valor de dividir "Area" entre "Div"
7. Reportar el valor de la variable "Area"
8. Final
Diagrama de flujo
National Research Council (NRC). “Being Fluent with Information Technology”, 2004.
1
3
Inicio
AREA = BASE * ALTURA Almacena en AREA el valor de multiplicar BASE por ALTURA
Final
El seudocódigo está compuesto por proposiciones informales (en este caso en español) que
permiten expresar detalladamente las instrucciones que llevan desde un estado inicial
(problema) hasta un resultado deseado (solución). Por lo regular, los algoritmos se escriben
por refinamiento: se escribe una primera versión que luego se descompone en varios
subproblemas (el número depende de la complejidad del problema) independientes entre sí.
Si es necesario se va refinando cada vez las instrucciones hasta que las proposiciones
generales en español como las del ejemplo anterior se puedan codificar en el lenguaje
seleccionado para hacer la programación.
Utilizar Diagramas de Flujo para representar un algoritmo tiene claras ventajas. Numerosas
investigaciones han mostrado que el Aprendizaje Visual es uno de los mejores métodos
para enseñar habilidades del pensamiento.
Identificar pasos erróneos: Sobre un diagrama es más fácil identificar los cambios
que se requieren para el correcto funcionamiento de un programa de computador
que hacerlo sobre el código.
4
Los Diagramas de Flujo son una de las técnicas más utilizadas para representar
gráficamente la secuencia de instrucciones de un Algoritmo. Estas instrucciones están
compuestas por operaciones, decisiones lógicas y ciclos repetitivos, entre otros. La solución
de un problema puede contener varios conjuntos de instrucciones (procedimientos o
métodos) que tienen como finalidad ejecutar cada uno de los procesos necesarios para
llegar a la solución de un problema a partir de los datos disponibles (estado inicial).
Forzar la identificación de todos los pasos de una solución de forma clara y lógica.
Establecer una visión amplia y objetiva de la solución.
Verificar si se han tenido en cuenta todas las posibilidades.
Comprobar si hay procedimientos duplicados.
Representar gráficamente una solución (es más simple hacerlo con gráficas que
mediante palabras).
Facilitar a otras personas la comprensión de la secuencia lógica de la solución
planteada.
Posibilitar acuerdos con base en la aproximación común a una solución de un
problema, resolver ambigüedades o realizar mejoras.
Establecer posibles modificaciones (resulta más fácil depurar un programa con el
diagrama que con el listado del código).
Agilizar la codificación (traducción) del algoritmo en un lenguaje de programación.
Servir como elemento de documentación de la solución del problema.
Actividad 1.2: Elaborar un algoritmo en seudocódigo para cada uno de los siguientes
problemas.
2
Rojas & Ñacato. 1980.
5
Inicio/Final
Se utiliza para indicar el inicio y el final de un diagrama; del Inicio sólo
puede salir una línea de flujo y al Final sólo debe llegar una línea.
Decisión
Indica la comparación de dos datos y dependiendo del resultado lógico
(falso o verdadero) se toma la decisión de seguir un camino del diagrama
u otro.
Entrada General
Entrada/Salida de datos en General.
Iteración
Indica que una instrucción o grupo de instrucciones deben ejecutarse
varias veces.
Salida Impresa
Indica la presentación de uno o varios resultados en forma impresa.
Llamada a subrutina
Indica la llamada a una subrutina o procedimiento determinado.
Salida en Pantalla
Instrucción de presentación de mensajes o resultados en pantalla.
Acción/Proceso General
Indica una acción o instrucción general que debe realizar el computador
(cambios de valores de variables, asignaciones, operaciones aritméticas,
etc.).
Conector
Indica el enlace de dos partes de un diagrama dentro de la misma página.
Flujo
Indica el seguimiento lógico del diagrama. También indica el sentido de
ejecución de las operaciones.
Conector
Indica el enlace de dos partes de un diagrama en páginas diferentes.
6
El Diagrama de Flujo es una herramienta gráfica valiosa para la representación esquemática
de la secuencia de instrucciones de un algoritmo o de los pasos de un proceso.
Poner un encabezado que incluya un título que identifique la función del algoritmo;
el nombre del autor; y la fecha de elaboración.
Sólo se pueden utilizar símbolos estándar (ISO 5807).
Los diagramas se deben dibujar de arriba hacia abajo y de izquierda a derecha.
La ejecución del programa siempre empieza en la parte superior del diagrama.
Los símbolos de “Inicio” y “Final” deben aparecer solo una vez.
La dirección del flujo se debe representar por medio de flechas (líneas de flujo).
Todas las líneas de flujo deben llegar a un símbolo o a otra línea.
Una línea de flujo recta nunca debe cruzar a otra.
Cuando dos líneas de flujo se crucen, una de ellas debe incluir una línea arqueada en
el sitio donde cruza a la otra (Figura 1.2).
Se deben inicializar las variables que se utilicen o permitir la asignación de valores
mediante consulta al usuario.
Las bifurcaciones y ciclos se deben dibujar procurando una cierta simetría.
Cada rombo de decisión debe tener al menos dos líneas de salida (una para SI y otra
para NO).
Las acciones y decisiones se deben describir utilizando el menor número de
palabras posible; sin que resulten confusas o poco claras.
Si el Diagrama se vuelve complejo y confuso, es mejor utilizar símbolos conectores
para reducir las líneas de flujo.
Todo el Diagrama debe ser claro, ordenado y fácil de recorrer.
El Diagrama se debe probar recorriéndolo con datos iniciales simples (prueba de
escritorio).
3
Rojas & Ñacato. 1980.
4
Lopez García, Juan Carlos. Algoritmos y programación, 2009.
7
UNIDAD 2
FUNDAMENTOS DE PROGRAMACIÓN
2.1 COMENTARIOS
Los comentarios no tienen ningún efecto en la ejecución del algoritmo. Se utilizan para
aclarar instrucciones que puedan prestarse a confusión o como ayuda a otras personas que
deben leerlo y entenderlo. La mayoría de los lenguajes de programación ofrecen la
posibilidad de comentar el código de los programas.
2.2 IDENTIFICADORES
Los identificadores son nombres que se dan a los elementos utilizados para resolver un
problema y poder diferenciar unos de otros. Al asignar nombres (identificadores) a
variables, constantes y procedimientos se deben tener en cuenta algunas reglas:
Los nombres pueden estar formados por una combinación de letras y números
(saldoMes, salario, fecha2, baseTriangulo, etc.).
El primer carácter de un nombre debe ser una letra.
La mayoría de los lenguajes de programación diferencian las mayúsculas de las
minúsculas.
Los nombres deben ser nemotécnicos, con solo leerlos se puede entender lo que
contienen. Deben ser muy descriptivos; no utilizar abreviaturas, a menos que se
justifique plenamente.
Es conveniente utilizar una sola palabra para nombrar páginas, controles, variables,
etc.
No utilizar caracteres reservados (%, +, /, >, etc.).
Se debe tener en cuenta que algunos lenguajes de programación no admiten las
tildes.
No utilizar palabras reservadas por los lenguajes de programación.
Para cumplir con convenciones ampliamente utilizadas, los nombres de
procedimientos, variables y constantes deben empezar con minúscula. Ejemplo,
fecha, suma, etc. Si es un nombre compuesto por varias palabras, cada una de las
palabras (con excepción de la primera) deben empezar con mayúscula. Ejemplo:
fechaInicial, baseTriangulo, etc.
2.3 VARIABLES
Para poder utilizar algoritmos con diferentes conjuntos de datos iniciales, se debe establecer
una independencia clara entre los datos iniciales de un problema y la estructura de su
solución. Esto se logra mediante la utilización de Variables.
En programación, las Variables son espacios de trabajo (contenedores) reservados para
guardar datos (valores).
8
El valor de una Variable puede cambiar en algún paso del Algoritmo o permanecer
invariable; por lo tanto, el valor que contiene una variable es el del último dato asignado a
esta. En la mayoría de los lenguajes de programación se utiliza la forma:
nombreVariable=valor
2.4 CONSTANTES
Las Constantes se crean de la misma forma que las variables y consisten en datos que,
luego de ser asignados, no cambian en ninguna instrucción del Algoritmo. Pueden contener
constantes matemáticas (pi) o generadas para guardar valores fijos (3.8, "Jorge", etc.).
2.5 CONTADORES
2.6 ACUMULADORES
Todos los lenguajes de programación definen unas palabras para nombrar sus comandos,
instrucciones y funciones. Un identificador definido por el usuario no puede tener el
nombre de una palabra reservada.
Actividad 2.1: Investigar cuales son las funciones matemáticas que proporciona el lenguaje
de programación Java.
9
La mayoría de los lenguajes de programación disponen de una amplia variedad de tipos de
datos.
Números: se utilizan como entradas en las operaciones matemáticas. Cuando se utilizan los
signos positivo (+) o negativo (-), estos deben estar pegados al número.
Palabras: Las palabras están formadas por letras y/o números. Una palabra está delimitada
por espacios en blanco; sin embargo, si se quiere tener un texto conformado por dos o más
palabras, algunos lenguajes de programación permiten encerrar el texto entre comillas o
barras.
2.10 OPERADORES
Son símbolos que sirven para manipular datos. Los operadores y las operaciones que se
pueden realizar con ellos se clasifican en:
Aritméticos: Posibilitan las operaciones entre datos de tipo numérico y dan como
resultado otro valor de tipo numérico. Ejemplo: potencia; producto; división; suma;
resta.
Relaciónales: Permiten la comparación entre datos del mismo tipo y dan como
resultado dos valores posibles: Verdadero o Falso. Ejemplo: igual a; menor que;
mayor que.
10
2.11 EXPRESIONES
Una Expresión está compuesta por valores, funciones, primitivas, constantes y/o variables,
o por una combinación de los anteriores mediante operadores.
Son Expresiones:
Una función (ejemplos: cos 60, arctan 1)
Una combinación de valores, constantes, variables, funciones y operadores que
siguen reglas de construcción y orden de evaluación de los operadores.
operadores aritméticos y datos numéricos (ejemplo: pi * 20)
Alfanuméricas: Dan como resultado una serie de cadena de caracteres.
Lógicas: Dan como resultado un valor "Verdadero" o "Falso". Contienen variables
y/o constantes enlazadas con operadores lógicos (ejemplo: A>0 y B<=5).
De Asignación: Estas Expresiones asignan el resultado de una Expresión a una
Variable o a una Constante.
2.12 PROCESOS
Asignar valores iniciales a variables y constantes
Leer datos que suministra el usuario por medio del teclado o del ratón (mouse).
Realizar operaciones matemáticas (aplicar fórmulas).
Reportar o mostrar contenidos de variables y constantes.
Mostrar en pantalla resultados de procedimientos activados por el programa.
2.13 INTERACTIVIDAD
2.14 PROCEDIMIENTOS
Los procedimientos son módulos con instrucciones que el computador ejecuta
automáticamente, una tras otra, hasta encontrar el final. Todo procedimiento debe tener un
nombre que lo identifique y que sirve para ejecutarlo cuando se ejecuta dicho nombre.
11
Todo procedimiento debe tener una línea de título que incluye un nombre; el cual, al
invocarlo, ejecuta en orden, una a una, las líneas de instrucciones que contiene hasta que
llega al final.
(opcional).
El nombre del procedimiento debe ser una palabra. Cuando se deben utilizar varias
palabras para nombrar un procedimiento, se escriben sin dejar espacio entre ellas y
con mayúscula la primera letra de la segunda palabra y de las subsiguientes palabras
(ejemplo: valorMasAlto).
Cada instrucción completa debe ocupar una línea de código.
Puede contener líneas en blanco.
Desde un procedimiento se pueden invocar otros procedimientos.
Ejemplo 2.1: Escribir y diseñar un procedimiento que se llame triangulo para hallar el área
de un triángulo rectángulo cuya Base mide 3 cm, la Altura 4 cm y la Hipotenusa 5 cm.
Inicio
DIV=2
BASE=3 Almacena valores a las constantes DIV, BASE y ALTURA
ALTURA=4
AREA
Imprime el valor almacenado en la variable AREA
Final
12
UNIDAD 3
ESTRUCTURAS BÁSICAS
Un Algoritmo está compuesto por instrucciones de diferentes tipos, organizadas
secuencialmente, en forma de estructuras de control. De estas estructuras, las más comunes
son las siguientes:
Secuencial.
Iterativa (repetición).
Condicional (decisión, selección).
Una estructura de control se define como “un esquema que permite representar ideas de
manera simplificada y que bajo condiciones normales, es constante”.5
“El uso del diseño descendente en los programas, la ejecución de operaciones secuenciales,
la utilización de ciclos repetitivos y, la toma de decisiones y alternativas de proceso,
ofrecen amplias posibilidades para resolver problemas mediante la construcción de
procedimientos”.6
Es fundamental que se preste atención especial a las estructuras que se utilizan para
resolver problemas y reconocerlas para lograr mayor control sobre la solución planteada.
De esta manera, la programación de computadores ayuda a planear conscientemente las
secuencias de acciones que resuelven un problema planteado y las estructuras involucradas
en una solución dada.
5
Trejos. 1999.
6
Castellanos & Ferreyra. 2000.
13
Inicio
Leer datos
Procesos
Reportar
resultados
Final
Declaración de variables.
Asignación de valores.
Entrada de datos.
Procesamiento de datos (operaciones).
Reporte de resultados.
14
Inicio
div = 2
altura, base
area
Final
Ejemplo 3.2: Escribir un procedimiento que muestre 3 veces en pantalla la frase “David
Ausubel”.
Inicio
“David Ausubel”
“David Ausubel”
“David Ausubel”
Final
Actividad 3.1: Diseñar un algoritmo que permita calcular el valor a pagar por la compra de
un producto sobre cuyo precio se oferta el 5% de descuento. Se debe pedir al usuario que
ingrese el precio del producto después de lo cual se debe calcular el descuento y el IVA
para obtener el total a pagar.
15
3.2 ESTRUCTURA ITERATIVA (REPETICIÓN)
Un número determinado de veces.
Mientras se cumpla una condición.
Ejemplo 3.3: Escribir un procedimiento que muestre 100 veces en pantalla la frase “David
Ausubel”.
Inicio
repite 1, 100
“David Ausubel”
Final
7
Lopez García, Juan Carlos. Algoritmos y programación, 2009.
16
Ejemplo 3.4: Calcular el valor de la sumatoria: 1 + 2 + 3 + 4 +5 + … + 100.
Inicio
Suma100
contador = 0
sumatoria = 0
repite 1, 100
contador = contador + 1
contador
sumatoria
Final
Consiste en almacenar en una variable sumatoria el valor de ella misma (sumatoria) más
otro valor variable (contador). Es muy utilizada para acumular valores.
17
Ejemplo 3.5: Elaborar un procedimiento para calcular las tablas de multiplicar. El usuario
debe ingresar qué tabla de multiplicar desea.
Inicio
tablaMultiplicar
tabla
cumpleveces
[multiplicando 10]
tabla “x”
multiplicando “=”
resultado
Final
La estructura condicional se utiliza para indicarle al computador que debe evaluar una
condición y, a partir del resultado, ejecutar el bloque de instrucciones correspondiente. La
forma más común está compuesta por una proposición (condición) que se evalúa y dos
bloques de instrucciones que se ejecutan, uno cuando la condición es verdadera (selección
simple y doble) y otro cuando ésta es falsa (únicamente en la selección doble).
Para que una proposición (frase declarativa) sea válida, debe poder afirmarse que es
verdadera o falsa.
18
En programación, se utilizan operadores relacionales (<, =, >) para establecer la relación
que existe entre dos elementos de la proposición.
Selección simple.
Selección doble.
Selección múltiple.
Las estructuras condicionales simple y doble evalúan una proposición (condición) que
devuelve como resultado únicamente dos valores posibles y excluyentes: verdadero o falso.
En cambio, la estructura condicional de selección múltiple permite que la condición
devuelva más de un valor posible y que para cada uno de esos valores se ejecute el bloque
de instrucciones correspondiente.
Selección simple
Selección doble
8
Lopez García, Juan Carlos. Algoritmos y programación, 2009.
19
Fig 3.4 Modelo de estructura condicional doble.9
Ejemplo 3.6: Un estudiante aprueba un examen cuando obtiene una calificación mayor o
igual a siete. Elaborar un procedimiento que pida al usuario una calificación, aplique el
criterio de aprobación e imprima “Aprobado” o “Reprobado”, según sea el caso.
Inicio
calificacion
Aprobado Reprobado
Final
Ejemplo 3.7: Una profesora necesita calcular la nota definitiva para cada uno de los 22
alumnos que asisten a su curso de geometría, con el fin de saber quiénes aprobaron y
quiénes reprobaron (para aprobar hay que obtener una nota igual o superior a 6.5), la
profesora realizó a todos sus estudiantes, en el primer periodo del año lectivo, dos
exámenes y asignó un trabajo de investigación. ¿Cómo se le puede ayudar?
9
Lopez García, Juan Carlos. Algoritmos y programación, 2009.
20
Análisis del problema
Formular el problema: Se requiere calcular un promedio de tres notas para cada uno de los 22 alumnos.
Resultados esperados: La nota definitiva de cada uno de los 22 alumnos y un aviso que indique si aprobó o
no.
Datos disponibles: El número de alumnos: 22. Las notas de cada alumno las debe digitar la profesora.
Restricciones: Cada una de las tres notas tiene el mismo porcentaje en la nota definitiva. Tres notas por
alumno y 22 alumnos.
Todas las notas deben ser mayores o iguales a 1 y menores o iguales a 10. Para aprobar hay que tener un
promedio igual o superior a 6.5.
Procesos necesarios: Para cada uno de los 22 alumnos: Leer las tres notas, verificar que estén en el rango
permitido (entre 1 y 10), sumarlas, calcular el promedio, verificar si aprobó o no. Mostrar el promedio y un
aviso que informe si aprobó o no.
Inicio
notas
Cumpleveces
[estudiante 22]
examenUno, examenDos,
trabajo
examenUno < 0
ó examenUno > 10
Verdad ó examenDos < 0 Falso
ó examenDos > 10
ó trabajo <0
ó trabajo > 10
datos no válidos
promedio = sumatoria / 3
Verdad Falso
promedio < 6.5
promedio,
aprobar
Final
21
Ejemplo 3.8: Escribir un procedimiento para leer tres números diferentes y determinar cuál
es el mayor de ellos.
Inicio
NUM1,
NUM2,
NUM3
Verdad Falso
NUM1 > NUM2 y NUM1 > NUM3
Mayor = NUM1
Verdad
NUM2 > NUM1 y NUM2 > NUM3
Mayor = NUM2
Falso
Mayor = NUM3
Mayor
Final
Actividad 3.2: Tomando como base el ejemplo anterior, realizar las modificaciones
necesarias para que adicionalmente, el programa muestre en pantalla el menor de los tres
números.
22
proposición y esta a su vez requiere que se evalúe una tercera proposición, y así
sucesivamente, hasta agotar todas las condiciones.
Plantear estructuras algorítmicas anidables (iterativa y condicional) requiere procesos de
pensamiento asociados con el sistema operatorio de clasificación o inclusión.
El siguiente caso ilustra muy bien este punto: "Se requiere elaborar un procedimiento que
permita determinar para un grupo de 10 personas si tienen derecho o no a jubilarse a partir
de los datos género, edad y años de aportes; y las siguientes condiciones: si es hombre debe
tener más de 65 años de edad y más de 60 años si es mujer, pero en todo caso se deben
haber realizado aportes por más de 20 años".
23
UNIDAD 4
JAVA
El lenguaje Java™ fue creado por Sun Microsystems Inc. en un proceso por etapas que
arranca en 1990, año en el que Sun creó un grupo de trabajo, liderado por James Gosling,
para desarrollar un sistema para controlar electrodomésticos e incluso PDAs o Asistentes
Personales (pequeños ordenadores) que, además, permitiera la conexión a redes de
ordenadores. Se pretendía crear un hardware polivalente, con un Sistema Operativo
eficiente (SunOS) y un lenguaje de desarrollo denominado Oak (roble), el precursor de
Java. El proyecto finalizó en 1992 y resultó un completo fracaso debido al excesivo coste
del producto, con relación a alternativas similares, tras lo cual el grupo se disolvió.
Después de la disolución del grupo de trabajo, únicamente quedaba del proyecto el lenguaje
Oak. Gracias a una acertada decisión de distribuir libremente el lenguaje por la Red de
Redes y al auge y la facilidad de acceso a Internet, propiciado por la WWW, el lenguaje se
popularizó y se consiguió que una gran cantidad de programadores lo depurasen y
terminasen de perfilar la forma y usos del mismo. A partir de este momento, el lenguaje se
difunde a una velocidad vertiginosa, añadiéndosele numerosas clases y funcionalidad para
TCP/IP. El nombre del lenguaje tuvo que ser cambiado ya que existía otro llamado Oak. El
nombre “Java” surgió en una de las sesiones de “brainstorming” celebradas por el equipo
de desarrollo del lenguaje. Buscaban un nombre que evocara la esencia de la tecnología
(viveza, animación, rapidez, interactividad…). Java fue elegido de entre muchísimas
propuestas. No es un acrónimo, sino únicamente algo humeante, caliente y que a muchos
programadores les gusta beber en grandes cantidades: una taza de café (Java en argot Inglés
americano10). De esta forma, Sun lanzó las primeras versiones de Java a principios de
1995.
Java es un lenguaje de desarrollo de propósito general, y como tal es válido para realizar
todo tipo de aplicaciones profesionales. Incluye una combinación de características que lo
hacen único.
Una de las características más importantes es que los programas “ejecutables”, creados por
el compilador de Java, son independientes de la arquitectura. Se ejecutan indistintamente
en una gran variedad de equipos con diferentes microprocesadores y sistemas operativos.
Casualmente, la pronunciación en inglés de este término es “yava”, que puede entenderse fuera de contexto como “¡ya
10
va!”.
24
Es público. Puede conseguirse un JDK (Java Developer's Kit) o Kit de desarrollo de
aplicaciones Java gratis.
Permite escribir Applets (pequeños programas que se insertan en una página
HTML) y se ejecutan en el ordenador local.
Se pueden escribir aplicaciones para intrarredes, aplicaciones cliente/servidor,
aplicaciones distribuidas en redes locales y en Internet.
Es fácil de aprender y está bien estructurado.
Las aplicaciones son fiables. Puede controlarse su seguridad frente al acceso a
recursos del sistema y es capaz de gestionar permisos y criptografía.
general.
Applets. Pequeñas aplicaciones que se ejecutan en un documento HTML, siempre y
cuando el navegador soporte Java.
Es intrínsecamente orientado a objetos.
Funciona perfectamente en red.
Aprovecha características de la mayoría de los lenguajes modernos evitando sus
inconvenientes.
Tiene una gran funcionalidad gracias a sus librerías (clases).
NO tiene punteros manejables por el programador, aunque los maneja interna y
transparentemente.
El manejo de la memoria no es un problema, la gestiona el propio lenguaje y no el
programador.
Genera aplicaciones con pocos errores posibles.
Incorpora Multi-Threading (para permitir la ejecución de tareas concurrentes dentro
de un mismo programa).
25
Que el programa deba ser “interpretado” no hace que sea poco eficiente en cuanto a
velocidad, ya que la interpretación se hace prácticamente al nivel de código máquina.
El lenguaje Java es robusto. Las aplicaciones creadas en este lenguaje son susceptibles de
contener pocos errores, principalmente porque la gestión de memoria y punteros es
realizada por el propio lenguaje y no por el programador.
Bien es sabido que la mayoría de los errores en las aplicaciones vienen producidos por
fallos en la gestión de punteros o la asignación y liberación de memoria. Además, el
lenguaje contiene estructuras para la detección de excepciones (errores de ejecución
previstos) y permite obligar al programador a escribir código fiable mediante la declaración
de excepciones posibles para una determinada clase reutilizable.
11
Sun Microsystems Inc.
26
Fig. 4.2 Máquina virtual Java.12
Existe una versión distinta de esta JVM para cada plataforma. Esta JVM se carga en
memoria y va traduciendo “al vuelo”, los byte-codes a código máquina. La JVM no ocupa
mucho espacio en memoria, piénsese que fue diseñada para poder ejecutarse sobre
pequeños electrodomésticos como teléfonos, televisores, etc.
12
Sun Microsystems Inc.
27
4.6 VISIÓN GENERAL Y ELEMENTOS BÁSICOS DEL LENGUAJE
En Java, prácticamente todo son clases (objetos). Por esta razón, un programa estará
formado por uno o varios ficheros fuente y en cada uno de ellos habrá definida una o varias
clases.
En un fichero fuente puede declararse una o más clases y tendrá un aspecto similar al que
sigue:
class Clase1 {
…
}
class Clase2 {
…
}
class ClaseN {
…
}
Una clase está formada por una parte correspondiente a la declaración, y otra
correspondiente al cuerpo de la misma:
DeclaracioDeClase {
cuerpo de clase
}
El cuerpo de las clases comienza con una llave abierta ( { ) y termina con una llave cerrada
( } ).
Dentro del cuerpo de la clase se declaran los atributos y los métodos de la clase.
Para que un programa se pueda ejecutar, debe contener una clase que tenga un método
main con la siguiente declaración:
El lenguaje Java, al igual que algunos otros, distingue entre mayúsculas y minúsculas, por
lo que es importante transcribirlo literalmente.
28
También hay que comentar que en el nombre del fichero fuente también se hace distinción
entre mayúsculas y minúsculas a la hora de compilarlo, aunque el sistema operativo
empleado no haga esta distinción. La extensión del mismo debe ser .java.
4.7 COMENTARIOS
Los comentarios en los programas fuente son muy importantes en cualquier lenguaje.
Sirven para aumentar la facilidad de comprensión del código y para recordar ciertas cosas
sobre el mismo. Son porciones del programa fuente que no serán compiladas, y, por tanto,
no ocuparán espacio en el fichero “ejecutable”. Únicamente sirven para documentar.
Si el comentario que se desea escribir es de una sola línea, basta con poner dos
barras inclinadas: //
Ejemplo:
// Este es un ejemplo de comentario
Si un comentario debe ocupar más de una línea, hay que anteponerle /* y al final */.
Ejemplo:
/* Esto es un
comentario que
ocupa tres líneas */
Los tipos de datos simples soportados por Java son los siguientes:
29
Tabla 4.1 Tipos de datos simples13.
No existen más datos simples en Java. Incluso éstos que se enumeran son envueltos por
clases equivalentes (java.lang.Integer, java.lang.Double, java.lang.Byte, etc.), que pueden
tratarlos como si fueran objetos en lugar de datos simples.
Nota: A diferencia de otros lenguajes de programación, los String en Java no son un tipo
simple de datos sino un. Los valores de tipo String van entre comillas dobles (“Hola”),
mientras que los de tipo char van entre comillas simples (‘K’).
El resto de tipos de datos que no son simples, son considerados referenciales. Estos tipos
son básicamente las clases, en las que se basa la programación orientada a objetos.
Dentro de estos tipos pueden considerarse las interfaces, los Strings y los vectores, que son
unas clases un tanto especiales.
Existe un tipo referencial especial nominado por la palabra reservada null que puede ser
asignado a cualquier variable de cualquier clase y que indica que el puntero no tiene
referencia a ninguna zona de memoria (el objeto no está inicializado).
Además, todos los tipos de datos simples vistos en el punto anterior pueden ser declarados
como referenciales (objetos), ya que existen clases que los engloban.
13
Sun Microsystems Inc.
30
Tabla 4.2 Clases equivalentes para tipos de datos simples14.
4.9 IDENTIFICADORES
Los identificadores son los nombres que se les da a las variables, clases, interfaces,
atributos y métodos de un programa.
2. Pueden estar formados por cualquiera de los caracteres del código Unicode, aunque
eso sí, el primer carácter no puede ser un dígito numérico y no pueden utilizarse
espacios en blanco ni símbolos coincidentes con operadores.
4. No puede ser una palabra reservada del lenguaje ni los valores lógicos true o false.
6. Por convenio, los nombres de las variables y los métodos deberían empezar por una
letra minúscula y los de las clases por mayúscula.
Además, si el identificador está formado por varias palabras la primera se escribe en
minúsculas (excepto para las clases) y el resto de palabras se hace empezar por
mayúscula (por ejemplo: añoDeCreación). Estas reglas no son obligatorias, pero son
convenientes ya que ayudan al proceso de codificación de un programa, así como a
su legibilidad. Es más sencillo distinguir entre clases y métodos o variables.
14
Sun Microsystems Inc.
31
Tabla 4.3 Ejemplos de identificadores válidos15.
Hay que evitar identificadores como a1, a2, a3, a4, va1, xc32, xc21, xsda, … y en general
todos aquellos identificadores que no “signifiquen” nada.
Ejemplo:
int x;
Ejemplo:
int x = 0;
15
Sun Microsystems Inc.
16
Sun Microsystems Inc.
32
4.10.1 ÁMBITO DE UNA VARIABLE
El ámbito de una variable es la porción de programa donde dicha variable es visible para el
código del programa y, por tanto, referenciable.
El ámbito de una variable depende del lugar del programa donde es declarada, pudiendo
pertenecer a cuatro categorías distintas.
Variable local.
Atributo.
Parámetro de un método.
Parámetro de un tratador de excepciones.
Como puede observarse, NO existen las variables globales. Esto no es un “defecto” del
lenguaje sino todo lo contrario. La utilización de variables globales resulta peligrosa, ya
que puede ser modificada en cualquier parte del programa y por cualquier procedimiento.
Además, a la hora de utilizarlas hay que buscar dónde están declaradas para conocerlas y
dónde son modificadas para evitar sorpresas en los valores que pueden contener.
Los ámbitos de las variables u objetos en Java siguen los criterios “clásicos”, al igual que
en la mayoría de los lenguajes de programación.
Si una variable no ha sido inicializada, tiene un valor asignado por defecto. Este valor es,
para las variables de tipo referencial (objetos), el valor null. Para las variables de tipo
numérico, el valor por defecto es cero (0), las variables de tipo char, el valor ‘\u0000’ y las
variables de tipo boolean, el valor false.
Variables locales
Una variable local se declara dentro del cuerpo de un método de una clase y es visible
únicamente dentro de dicho método.
NOTA: También pueden declararse variables dentro de un bloque delimitado por llaves {
… }. En ese caso, sólo serán “visibles” dentro de dicho bloque.
Ejemplo:
class Caracter {
char ch;
public Caracter(char c) {
ch=c;
}
33
System.out.println(ch);
}
}
}
En este ejemplo existe una variable local: int i; definida en el método repetir de la clase
Caracter, por lo tanto, únicamente es visible dentro del método repetir.
Ejemplo:
int x,y,z;
No es necesario que se declaren al principio del método. Puede hacerse en cualquier lugar
del mismo, incluso de la siguiente forma:
En el caso de las variables locales, éstas no se inicializan con un valor por defecto, como se
ha comentado en el punto anterior, sino que es necesario asignarles algún valor antes de
poder utilizarlas en cualquier instrucción, de lo contrario el compilador genera un error, de
tal forma que es imposible hacer uso de una variable local no inicializada sin que se percate
de ello el compilador.
Ejemplo:
34
public static void miMetodo(int v1, int v2, float v3, String v4,
ClaseObjeto v5);
Nótese que aunque existan varios parámetros pertenecientes al mismo tipo o clase, no
pueden declararse abreviadamente, como ocurre con las variables locales y los atributos,
indicando el tipo y a continuación la lista de parámetros separados por comas. Así, no es
correcta la siguiente declaración del método anterior:
public static void miMétodo(int v1, v2, float v3, String v4,
ClaseObjeto v5); (INCORRECTO)
La declaración de un parámetro puede ir antecedida, como ocurre con las variables locales,
por la palabra reservada final. En ese caso, el valor de dicho parámetro no podrá ser
modificado en el cuerpo del método.
4.11 OPERADORES
Existen muchas definiciones técnicas para el término expresión. Puede decirse que una
expresión es una combinación de operandos ligados mediante operadores.
Los operandos pueden ser variables, constantes, funciones, literales, etc. y los operadores
todos los enumerados en este punto.
17
Sun Microsystems Inc.
35
4.11.1 Operadores aritméticos
++op1: En primer lugar realiza un incremento (en una unidad) de op1 y después
ejecuta la instrucción en la cual está inmerso.
--op1: En primer lugar realiza un decremento (en una unidad) de op1 y después
ejecuta la instrucción en la cual está inmerso.
Los operadores relacionales actúan sobre valores enteros, reales y caracteres (char); y
devuelven un valor del tipo boolean (true o false).
18
Sun Microsystems Inc.
36
Tabla 4.7 Operadores relacionales19.
Ejemplo:
class Relacional {
public static void main(String[] args]) {
double op1,op2;
op1=1.34;
op2=1.35;
System.out.println("op1="+op1+" op2="+op2);
System.out.println("op1>op2 = "+(op1>op2));
System.out.println("op1<op2 = "+(op1<op2));
System.out.println("op1==op2 = "+(op1==op2));
System.out.println("op1!=op2 = "+(op1!=op2));
char op3,op4;
op3='a'; op4='b';
System.out.println("'a'>'b' = "+(op3>op4));
}
}
op1=1.34 op2=1.35
op1>op2 = false
op1<op2 = true
op1==op2 = false
op1!=op2 = true
'a'>'b' = false
19
Sun Microsystems Inc.
37
4.11.3 Operadores lógicos
Estos operadores actúan sobre operadores o expresiones lógicas, es decir, aquellos que se
evalúan a cierto o falso (true / false).
Ejemplo:
class Bool {
public static void main (String[] args) {
boolean a=true;
boolean b=true;
boolean c=false;
boolean d=false;
System.out.println("true Y true = " + (a && b));
System.out.println("true Y false = " + (a && c));
System.out.println("false Y false = " + (c && d));
System.out.println("true O true = " + (a || b));
System.out.println("true O false = " + (a || c));
System.out.println("false O false = " + (c || d));
System.out.println("NO true = " + !a);
System.out.println("NO false = " + !c);
System.out.println("(3 > 4) Y true = " + ((3 >4) && a));
}
}
20
Sun Microsystems Inc.
38
4.11.4 Operadores de asignación
op1 = Expresión
Además del operador de asignación existen unas abreviaturas cuando el operando que
aparece a la izquierda del símbolo de asignación también aparece a la derecha del mismo:
Asignación = += -= *= /= %= ^=
&= |= >>= <<=
21
Sun Microsystems Inc.
39
4.12 CONSTANTES
Las constantes en Java son declaradas como atributos de tipo final. En ese caso, sólo
permiten que se les asigne un valor una única vez.
Ejemplo:
final int x=0;
Ejemplo:
final int x;
…
x=y+2;
Las secuencias de escape son combinaciones del símbolo contrabarra \ seguido de una letra,
y sirven para representar caracteres que no tienen una equivalencia en forma de símbolo.
4.14 ENTRADA/SALIDA
4.14.1 Streams
22
Sun Microsystems Inc.
40
Para que un programa pueda leer datos de alguna fuente, debe crear un stream de entrada
conectado a ésta; una fuente típica puede ser el teclado o un fichero. Y para escribir datos
hacia un destino, debe crear un stream de salida conectado a éste; un destino típico puede
ser la pantalla o un fichero.
Java proporciona distintas clases para el manejo de estos flujos de información, todas ellas
contenidas en el paquete java.io.
En la clase System hay definido un objeto out de la clase java.io.PrintStream, que gestiona
la salida estándar y que contiene los métodos print(), println() y write().
Estos tres atributos son estáticos y, por lo tanto, no necesita instanciarse ningún objeto de la
clase System para poder utilizarlos. Además, son streams que ya se encuentran abiertos y
listos para ser utilizados.
Para la salida por pantalla debería utilizarse la clase PrintWriter y para la entrada por
teclado, BufferdReader (aunque a veces, por razones de comodidad y prisa, se utilicen
directamente System.out y System.in).
Ejemplo:
import java.io.*;
class E_S_1 {
public static void main(String arg[]) {
String línea=null;
41
BufferedReader entrada = new BufferedReader(
new InputStreamReader(System.in));
PrintWriter salida = new PrintWriter(System.out,true);
salida.println("\nEscribe el texto: ");
try {
linea = entrada.readLine();
}
catch (Exception e) {
System.err.println(e);
}
salida.println("\nLa línea escrita es: ");
salida.println(línea);
}
}
42
public String leerLineaScanner(){
String linea = null;
Scanner lectorScanner = new Scanner(System.in)
linea = lectorScanner.nextLine();
return linea;
}
Las estructuras de control son construcciones hechas a partir de palabras reservadas del
lenguaje que permiten modificar el flujo de ejecución de un programa. De este modo,
pueden crearse construcciones de alternativas y bucles de repetición de bloques de
instrucciones.
Hay que señalar que un bloque de instrucciones se encontrará encerrado mediante llaves
{……..} si existe más de una instrucción.
Las estructuras alternativas son construcciones que permiten alterar el flujo secuencial de
un programa, de forma que en función de una condición o el valor de una expresión, el
mismo pueda ser desviado en una u otra alternativa de código.
if-else
switch
if-else
Forma simple:
if (expresión){
Bloque de instrucciones
}
El bloque de instrucciones se ejecuta si, y sólo si, la expresión (que debe ser lógica) se
evalúa a true, es decir, se cumple una determinada condición.
Ejemplo:
if (cont == 0){
System.out.println he llegado a cero ;
}
43
La instrucción System.out.println he llegado a cero ; sólo se ejecuta en el caso de
que cont contenga el valor cero.
if (expresión) {
Bloque de instrucciones 1
}else{
Bloque de instrucciones 2
}
Ejemplo:
if (cont == 0) {
System.out.println he llegado a cero ;
}else{
System.out.println no he llegado a cero ;
}
Si cont vale cero, se mostrará en el mensaje “he llegado a cero”. Si cont contiene cualquier
otro valor distinto de cero, se mostrará el mensaje “no he llegado a cero”.
if-else anidados
class Nota {
public static void main (String[] args) {
int nota;
if (argumentos.length<1) {
// argumentos.length contiene el número de Elementos del
// array argumentos, que contiene los Parámetros
//suministrados en la línea de comandos.
System.out.println("Nota num");
System.out.println("Donde num = nº entre 0 y 10");
}else{
nota=Integer.valueOf(argumentos[0]).intValue( );
// la instrucción anterior convierte un String a entero.
if (nota<5){
System.out.println("Insuficiente");
}else{
44
if (nota<6){
System.out.println("Suficiente");
}else{
if (nota<7){
System.out.println("Bien");
}else{
if (nota<9){
System.out.println("Notable");
}else{
System.out.println("Sobresaliente");
}
}
}
}
}
}
}
switch
Forma simple:
switch (expresión) {
case valor1: instrucciones1;
break;
case valor2: instrucciones2;
break;
…
case valorN: instruccionesN;
}
En primer lugar se evalúa la expresión cuyo resultado puede ser un valor de cualquier tipo.
El programa comprueba el primer valor (valor1). En el caso de que el valor resultado de la
expresión coincida con valor1, se ejecutaran las instrucciones1 hasta encontrarse con la
palabra reservada break. Si el resultado de la expresión no coincide con valor1,
evidentemente no se ejecutarían instrucciones1, se comprobaría la coincidencia con valor2
y así sucesivamente hasta encontrar un valor que coincida o llegar al final de la
construcción switch.
En caso de que no exista ningún valor que coincida con el de la expresión, no se ejecuta
ninguna acción.
45
Ejemplo:
class DiaSemana {
public static void main(String[] args) {
int dia;
if (argumentos.length<1) {
System.out.println("Uso: DiaSemana num");
System.out.println("Donde num = nº entre 1 y 7");
}else{
dia=Integer.valueOf(argumentos[0]).intValue();
switch (dia){
case 1: System.out.println("Lunes");
break;
case 2: System.out.println("Martes");
break;
case 3: System.out.println("Miércoles");
break;
case 4: System.out.println("Jueves");
break;
case 5: System.out.println("Viernes");
break;
case 6: System.out.println("Sábado");
break;
case 7: System.out.println("Domingo");
}
}
}
}
switch (expresión) {
case valor1: instrucciones1;
case valor2: instrucciones2;
…
case valorN: instruccionesN;
default: instruccionesPorDefecto;
}
Ejemplo:
class DiasMes{
public static void main(String[] args) {
int mes;
46
if (argumentos.length<1) {
System.out.println("Uso: DiasMes num");
System.out.println("Donde num = nº del mes");
}else{
mes=Integer.valueOf(argumentos[0]).intValue();
switch (mes) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12: System.out.println("El mes "+ mes + "
Tiene 31 días");
break;
case 4:
case 6:
case 9:
case 11: System.out.println("El mes "+mes + "
Tiene 30 días");
break;
case 2: System.out.println("El mes "+mes + "
Tiene 28 ó 29 días");
break;
default: System.out.println("El mes "+mes + "
no existe");
}
}
}
}
4.15.2 Bucles
Los bucles son estructuras de repetición. Bloques de instrucciones que se repiten un número
de veces mientras se cumpla una condición o hasta que se cumpla una condición.
for
do-while
while
Como regla general puede decirse que se utilizará el bucle for cuando se conozca de
antemano el número exacto de veces que ha de repetirse un determinado bloque de
instrucciones. Se utilizará el bucle do-while cuando no se conoce exactamente el número de
47
veces que se ejecutará el bucle pero se sabe que por lo menos se ha de ejecutar una. Se
utilizará el bucle while-do cuando es posible que no deba ejecutarse ninguna vez.
Estas reglas son generales y algunos programadores se sienten más cómodos utilizando
principalmente una de ellas. Con mayor o menor esfuerzo, puede utilizarse cualquiera de
ellas indistintamente.
for
La cláusula inicialización es una instrucción que se ejecuta una sola vez al inicio del
bucle, normalmente para inicializar un contador.
La cláusula condición es una expresión lógica, que se evalúa al inicio de cada nueva
iteración del bucle. En el momento en que dicha expresión se evalúe a false, se
dejará de ejecutar el bucle y el control del programa pasará a la siguiente instrucción
(a continuación del bucle for).
La cláusula incremento es una instrucción que se ejecuta en cada iteración del bucle
como si fuera la última instrucción dentro del bloque de instrucciones.
Generalmente se trata de una instrucción de incremento o decremento de alguna
variable.
Cualquiera de estas tres cláusulas puede estar vacía, aunque SIEMPRE hay que poner los
puntos y coma ( ; ).
Ejemplo:
import java.util.Scanner;
48
System.out.println(tabla + " * " + i + " = " + resultado);
}
}
}
do-while
do{
bloque instrucciones
}while (expresión);
En este tipo de bucle, bloque instrucciones se ejecuta siempre una vez por lo menos, y ese
bloque de instrucciones se ejecutará mientras Expresión se evalúe a true. Por lo tanto, entre
las instrucciones que se repiten deberá existir alguna que, en algún momento, haga que la
expresión se evalúe a false, de lo contrario el bucle sería infinito.
Ejemplo:
int opcion;
do {
System.out.println("MENÚ DE OPCIONES");
System.out.println("1.- Comenzar");
System.out.println("2.- Abrir");
System.out.println("3.- Grabar");
System.out.println("4.- Salir");
System.out.print("\n Opción? ");
opcion = lectorScanner.nextInt();
switch (opcion) {
case 1:
System.out.println("Listo para iniciar");
break;
case 2:
System.out.println("Abriendo archivo");
break;
case 3:
System.out.println("Información guardada con éxito");
}
System.out.println("Fin");
}
49
while
while (expresión){
bloque instrucciones
}
Ejemplo:
double cuadrado = 0;
while(numero > 0)
{
cuadrado = Math.pow(numero, 2);
System.out.println( "Cuadrado: " + cuadrado);
System.out.println("Fin");
}
}
Como puede comprobarse, las tres construcciones de bucle (for, do-while y while) pueden
utilizarse indistintamente realizando unas pequeñas variaciones en el programa.
4.15.3 Saltos
50
break
La instrucción break sirve para abandonar una estructura de control, tanto de las
alternativas (if-else y switch) como de las repetitivas o bucles (for, dowhile y while). En el
momento que se ejecuta la instrucción break, el control del programa sale de la estructura
en la que se encuentra.
Ejemplo:
class Break {
public static void main(String[] args) {
int i;
Iteración: 1
Iteración: 2
continue
La instrucción continue sirve para transferir el control del programa desde la instrucción
continue directamente a la cabecera del bucle (for, do-while o while) donde se encuentra.
Ejemplo:
class Continue {
public static void main(String[] args) {
int i;
for (i=1; i<=4; i++) {
if (i==3) continue;
System.out.println("Itereación: "+i);
}
}
}
Este programa es muy similar al anterior, pero en lugar de utilizar la instrucción break, se
ha utilizado continue. El resultado es el siguiente:
51
Iteración: 1
Iteración: 2
Iteración: 4
Puede comprobarse la diferencia con respecto al resultado del ejemplo del apartado
anterior. En este caso no se abandona el bucle, sino que se transfiere el control a la cabecera
del bucle donde se continúa con la siguiente iteración.
Tanto el salto break como en el salto continue, pueden ser evitados mediante distintas
construcciones pero en ocasiones esto puede empeorar la legibilidad del código.
4.16 VECTORES
Para manejar colecciones de objetos del mismo tipo estructurados en una sola variable se
utilizan los vectores. En Java, los vectores son en realidad objetos y por lo tanto se puede
llamar a sus métodos.
1. tipo nombreDelVector[];
2. tipo[] nombreDelVector;
Ejemplo:
int vector1[], vector2;
int[] otroVector;
Ejemplo:
int matriz[][];
int[][] otraMatriz;
Los vectores, al igual que las demás variables pueden ser inicializados en el momento de su
declaración. En este caso, no es necesario especificar el número de elementos máximo
reservado. Se reserva el espacio justo para almacenar los elementos añadidos en la
declaración.
Ejemplo:
Una simple declaración de un vector no reserva espacio en memoria, a excepción del caso
anterior, en el que sus elementos obtienen la memoria necesaria para ser almacenados. Para
reservar la memoria hay que llamar explícitamente a un constructor new de la siguiente
forma:
new tipoElemento[numElementos];
52
Ejemplo:
int matriz[][];
matriz = new int[4][7];
Ejemplo:
Para hacer referencia a los elementos particulares del vector, se utiliza el identificador del
vector junto con el índice del elemento entre corchetes. El índice del primer elemento es el
cero (0) y el del último, el número de elementos menos uno.
Ejemplos:
j = vector[0];
vector[4] = matriz[2][3];
El intento de acceder a un elemento fuera del rango de la matriz, provoca una excepción
(error) que, de no ser manejado por el programa, será el compilador quien aborte la
operación.
Ejemplo
class Array1 {
public static void main (String[] args) {
String colores[] = {"Rojo","Verde","Azul","Amarillo",
"Negro"};
int i;
for (i=0;i<colores.length;i++){
System.out.println(colores[i]);
}
}
}
Rojo
Verde
Azul
Amarillo
Negro
NOTA: Los Strings o cadenas de caracteres en Java son objetos pertenecientes a las clases
String o StringBuffer y no vectores de tipo char.
53
4.17 EJERCICIOS
import java.util.Scanner;
54
System.out.println("David Ausubel");
System.out.println("David Ausubel");
System.out.println("David Ausubel");
}
}
System.out.print(contador);
System.out.println("\t" + sumatoria);
}
import java.util.Scanner;
55
int tabla=0, multiplicando=0, resultado=0;
}
}
float calificacion=0;
56
examenDos = lectorScanner.nextFloat();
System.out.print("Ingrese la nota de trabajo? ");
trabajo = lectorScanner.nextFloat();
if(aprobar == 1){
System.out.println("SI");
}else{
System.out.println("NO");
}
}
}
}
}
import java.util.Scanner;
57
}else{
mayor = num3;
}
}
BIBLIOGRAFÍA
58