5 - Java Intro
5 - Java Intro
INTRODUCCION A
JAVA
FUNDAMENTOS DEL LENGUAJE
Objetivos de la Guía
En esta guía aprenderemos a:
PINTRODUCCIÓN A JAVAP
Hasta el momento hemos aprendido los diferentes tipos de estructuras de control comunes a
todos los lenguajes de programación, dentro del paradigma de programación imperativa,
haciendo uso del pseudo intérprete PSeInt. A partir de esta guía comenzaremos a introducir cada
uno de los conceptos vistos hasta el momento, pero haciendo uso de un lenguaje de
programación de propósito general como lo es Java.
JAVA
Java es un tipo de lenguaje de programación y una plataforma informática, creada y
comercializada por Sun Microsystems en el año 1995 y desde entonces se ha vuelto muy popular,
gracias a su fácil portabilidad a todos los sistemas operativos existentes.
Java es un lenguaje de programación de alto nivel, estos, permiten escribir código mediante
idiomas que conocemos (ingles, español, etc.) y luego, para ser ejecutados, se traduce al lenguaje
de máquina mediante traductores o compiladores. Java es un lenguaje de alto nivel donde sus
palabras reservadas están en ingles.
1
O podemos hacer click en la siguiente opción:
2
Ahora deberemos elegir el tipo de proyecto que queremos crear, vamos a elegir un proyecto de
Java
Aquí
colocamos el
nombre del
proyecto de la
siguiente
manera:
nombreGuiaEj
01
3
P¿CÓMO SE VE UN PROGRAMA EN JAVA?P
Un programa describe como un ordenador debe interpretar las ordenes del programador para
que ejecute y realice las instrucciones dadas tal como están escritas. Un programador utiliza los
elementos que ofrece un lenguaje de programación para diseñar programas que resuelvan
problemas concretos o realicen acciones bien definidas.
El siguiente programa Java muestra un mensaje en la consola con el texto “Hola Mundo”.
En este programa se pueden identificar los siguientes elementos del lenguaje Java: comentarios,
paquete, definiciones de clase, definiciones de método y sentencias. Veamos qué es y qué hace
cada uno:
Los comentarios son ignorados por el compilador y solo son útiles para el programador. Los
comentarios ayudan a explicar aspectos relevantes de un programa y lo hacen más legible. En un
comentario se puede escribir todo lo que se desee, el texto puede ser de una o más líneas.
4
¿CUÁL ES EL PAQUETE?
Después del comentario viene está escrito el nombre del paquete. Los paquetes son
contenedores de clases y su función es la de organizar la distribución de las clases. Los paquetes
y las clases son análogos a las carpetas y archivos utilizadas por el sistema operativo,
respectivamente. Esto quiere decir, cada paquete es una carpeta que contiene archivos, que son
las clases.
package <nombre_paq_sup>[.<nombre_sub_paq>]*;
La declaración package, en caso de existir, debe estar al principio del archivo fuente y sólo la
declaración de un paquete está permitida. Los nombres de los paquetes los pondrá el
programador al crear el programa y son jerárquicos (al igual que una organización de directorios
en disco) además, están separados por puntos. Es usual que sean escritos completamente en
minúscula.
¿CUÁL ES LA CLASE?
La primera línea del programa, después del package. Define una clase que se llama HolaMundo.
En el mundo de orientación a objetos, todos los programas se definen en término de objetos y sus
relaciones. Las clases sirven para modelar los objetos que serán utilizados por nuestros
programas. Los objetos, las clases y los paquetes son conceptos que serán abordados con
profundidad más adelante en el curso.
Una clase está formada por una parte correspondiente a la declaración de la clase, y otra
correspondiente al cuerpo de la misma:
Declaración de clase {
Cuerpo de clase
5
¿CUÁL ES EL MÉTODO?
Después de la definición de clase se escribe la definición del método main(). Pero que es un
método?. Dentro del cuerpo de la clase se declaran los atributos y los métodos de la clase. Un
método es una secuencia de sentencias ejecutables. Las sentencias de un método quedan
delimitadas por los caracteres { y } que indican el inicio y el fin del método, respectivamente. Si
bien es un tema sobre el que se profundizará más adelante en el curso, los métodos son de vital
importancia para los objetos y las clases. En un principio, para dar los primeros pasos en Java nos
alcanza con esta definición.
Método main()
Ahora sabemos lo que es un método, pero en el ejemplo podemos ver el método main(). El main()
sirve para que un programa se pueda ejecutar, este método, vendría a representar el Algoritmo /
FinAlgoritmo de PseInt y tiene la siguiente declaración:
public: es un tipo de acceso que indica que el método main() es público y, por tanto, puede ser
llamado desde otras clases. Todo método main() debe ser público para poder ejecutarse desde el
intérprete Java (JVM).
static: es un modificador el cual indica que la clase no necesita ser instanciada para poder utilizar
el método. También indica que el método es el mismo para todas las instancias que pudieran
crearse.
El método main() debe aceptar siempre, como parámetro, un vector de strings, que contendrá los
posibles argumentos que se le pasen al programa en la línea de comandos, aunque como es
nuestro caso, no se utilice.
Luego, al indicarle a la máquina virtual que ejecute una aplicación el primer método que ejecutará
es el método main(). Si indicamos a la máquina virtual que corra una clase que no contiene este
método, se lanzará un mensaje advirtiendo que la clase que se quiere ejecutar no contiene un
método main(), es decir que dicha clase no es ejecutable.
Si no se han comprendido hasta el momento muy bien todos estos conceptos, los mismos se
irán comprendiendo a lo largo del curso.
6
SENTENCIA
Son las unidades ejecutables más pequeña de un programa, en otras palabras, una línea de
código escrita es una sentencia. Especifican y controlan el flujo y orden de ejecución del
programa. Una sentencia consta de palabras clave o reservadas como expresiones, declaraciones
de variables, o llamadas a funciones.
En nuestro ejemplo, del método main() se incluye una sentencia para mostrar un texto por la
consola. Los textos siempre se escriben entre comillas dobles para diferenciarlos de otros
elementos del lenguaje. Todas las sentencias de un programa Java deben terminar con el
símbolo punto y coma. Este símbolo indica al compilador que ha finalizado una sentencia.
Una vez que el programa se ha editado, es necesario compilarlo y ejecutarlo para comprobar si es
correcto. Al finalizar el proceso de compilación, el compilador indica si hay errores en el código
Java, donde se encuentran y el tipo de error que ha detectado: léxico, sintáctico o semántico.
7
¿QUÉ SON LAS PALABRAS RESERVADAS?
Palabras que dentro del lenguaje significan la ejecución de una instrucción determinada, por lo
que no pueden ser utilizadas con otro fin. En Java, al ser un lenguaje que está creado en ingles,
todas nuestras palabras reservadas van a estar en ese idioma.
VARIABLES Y CONSTANTES
Recordemos que en Pseint dijimos que los programas de computadora necesitan información
para la resolución de problemas. Está información puede ser un numero, un nombre, etc. Para
utilizar la información, vamos a guardarla en algo llamado, variables y constantes. Las variables y
constantes vendrían a ser como pequeñas cajas, que guardan algo en su interior, en este caso
información. Estas, van a contar como previamente habíamos mencionado, con un identificador,
un nombre que facilitara distinguir unas de otras y nos ayudara a saber que variable o constante
es la contiene la información que necesitamos.
Dentro de toda la información que vamos a manejar, a veces, necesitaremos información que no
cambie. Tales valores son las constantes. De igual forma, existen otros valores que necesitaremos
que cambien durante la ejecución del programa; esas van a ser nuestras variables.
Normalmente los identificadores de las variables y de las constantes con nombre deben ser
declaradas en los programas antes de ser utilizadas. La sintaxis de la declaración de una variable
en java suele ser:
<tipo_de_dato> <nombre_variable>;
8
PTIPOS DE DATO EN JAVAP
Java es un lenguaje de tipado estático, esto significa que todas las variables deben ser
declaradas antes que ellas puedan ser utilizadas y que no podemos cambiar el tipo de dato de
una variable, a menos que, sea a traves de una conversión.
byte Es un entero con signo de 8 bits, el mínimo valor que se puede almacenar es -128 y
el máximo valor es de 127 (inclusive).
short Es un entero con signo de 16 bits. El valor mínimo es -32,768 y el valor máximo
32,767 (inclusive).
long Es un entero con signo de 64 bits, el valor mínimo que puede almacenar este tipo de
dato es -9,223,372,036,854,775,808 y el máximo valor es
9,223,372,036,854,775,807 (inclusive).
float Es un número decimal de precisión simple de 32 bits (IEEE 754 Punto Flotante).
double Es un número decimal de precisión doble de 64 bits (IEEE 754 Punto Flotante).
boolean Este tipo de dato sólo soporta dos posibles valores: verdadero o falso y el dato es
representado con tan solo un bit de información.
String Además de los tipos de datos primitivos el lenguaje de programación Java provee
también un soporte especial para cadena de caracteres a través de la clase String.
Los objetos String son inmutables, esto significa que una vez creados, sus valores
no pueden ser cambiados. Si bien esta clase no es técnicamente un tipo de dato
primitivo, el lenguaje le da un soporte especial y hace parecer como si lo fuera.
9
¿Como se ve en Java?
EJERCICIO 1
Crear un proyecto de Java y definir al menos 6 variables en tu IDE de distintos tipos de datos.
DETECCIÓN DE ERRORES
¿Puedes corregir las siguientes declaraciones de variables?
10
PINSTRUCCIONES PRIMITIVASP
Dentro de las instrucciones previamente vistas, existe una subdivisión que son las instrucciones
primitivas, las instrucciones primitivas van a ser las instrucciones de asignación, lectura y escritura.
ASIGNACIÓN
La instrucción de asignación permite almacenar un valor en una variable (previamente definida).
Esta es nuestra manera de guardar información en una variable, para utilizar ese valor en otro
momento.
<variable> = <expresión>
En Java, podemos definir una variable y al mismo tiempo podemos asignarle un valor a diferencia
de Pseint:
byte 0
short 0
int 0
long 0
float 0.0
double 0.0
boolean False
char '\u0000'
String Null
11
Objetos Null
Las variables locales son ligeramente diferentes; el compilador no asigna un valor predeterminado
a una variable local no inicializada. Las variables locales son aquellas que se declaran dentro de
un método. Si una variable local no se inicializa al momento de declararla, se debe asignar un
valor antes de intentar usarla. El acceso a una variable local no inicializada dará lugar a un error en
tiempo de compilación.
EJERCICIO 2
¿Recuerdas las variables que creaste en el ejercicio anterior? Ahora deberás asignarles un valor.
DETECCIÓN DE ERRORES
public static void main(String[] args) {
int numero = "48";
double decimales = 3,55;
bolean bandera -> "false";
}
POPERADORESP
Los operadores son símbolos especiales de la plataforma que permiten especificar operaciones
en uno, dos o tres operandos y retornar un resultado. También aprenderemos qué operadores
poseen mayor orden de precedencia. Los operadores con mayor orden de precedencia se
evalúan siempre primero.
12
Primeramente, proceden los operadores unarios, luego los aritméticos, después los de bits,
posteriormente los relacionales, detrás vienen los booleanos y por último el operador de
asignación. La regla de precedencia establece que los operadores de mayor nivel se ejecuten
primero. Cuando dos operadores poseen el mismo nivel de prioridad los mismos se evalúan de
izquierda a derecha.
Operadores Aritméticos
+ Operador de Suma
- Operador de Resta
* Operador de Multiplicación
/ Operador de División
% Operador de Módulo
Operadores Unarios
++ Operador de Incremento.
-- Operador de Decremento.
== Igual
!= Distinto
13
¿Como se ve en Java?
EJERCICIO 3
Define variables donde puedas alojar los resultados y prueba usar dos operadores de cada tipo.
14
PTIPOS DE INSTRUCCIONESP
Además de los elementos de un programa/algoritmo, tenemos las instrucciones que pueden
componer un programa. Las instrucciones —acciones— básicas que se pueden implementar de
modo general en un algoritmo y que esencialmente soportan todos los lenguajes son las
siguientes:
ESCRITURA EN JAVA
En nuestro ejemplo de código al principio de la guía, usábamos la instrucción System.out.println()
para mostrar el mensaje Hola Mundo. Esta instrucción permite mostrar valores en el Output, que
es la interfaz grafica de Java. Todo lo que quisiéramos mostrar en nuestra interfaz grafica, deberá
ir entre comillas dobles y dentro del paréntesis.
System.out.println(“Hola Mundo”);
Si quisiéramos que concatenar un mensaje y la impresión de una variable deberíamos usar el
símbolo más para poder lograrlo.
System.out.print("Hola");
System.out.print(“Mundo”);
15
EJERCICIO 4
Define una variable que aloje tu nombre y otra que guarde tu edad. Imprime ambas variables por
pantalla.
16
PLECTURA O ENTRADA EN JAVAP
En Java hay muchas maneras de ingresar información en el Output por teclado en nuestro
programa Java, en el curso vamos a usar la clase Scanner.
Scanner es una clase en el paquete java.util utilizada para obtener la entrada de los tipos
primitivos como int, double etc. y también String. Es la forma más fácil de leer datos en un
programa Java.
• Este objeto Scanner vamos a tener que importarlo para poder usarlo, ya que es una
herramienta que nos provee Java. Para importarlo vamos a utilizar la palabra clave import,
seguido de la declaración de la librería donde se encuentra el Scanner. Esta sentencia, va
debajo de la sentencia package. La sentencia se ve así: import java.util.Scanner;
• Para utilizar las funciones del objeto Scanner, vamos a utilizar el nombre que le hemos
asignado y después del nombre ponemos un punto(.), de esa manera podremos llamar a
las funciones del Scanner.
• Para leer valores numéricos de un determinado tipo de datos, la función que se utilizará es
nextT(). Por ejemplo, para leer un valor de tipo int (entero), podemos usar nextInt(), para
leer un valor de tipo double(real), usamos nextDouble() y etc. Para leer un String (cadenas),
usamos nextLine().
int numero;
numero = leer.nextInt();
17
¿Ya viste que al utilizar ‘leer.’ NetBeans otorga una lista de
sugerencias? Debes seleccionar en esas sugerencias, el tipo de dato
que quieres leer, que coincidirá con el tipo de variable donde alojarás
esa información.
EJERCICIO 5
Define una variable de tipo boolean, double y char. Guarda información en ellas a través del
Scanner.
DETECCIÓN DE ERRORES
Arreglar la siguiente porción de codigo.
System.out.println("Ingresa tu nombre");
int edad = leer.next();
}
}
18
Revisemos lo aprendido hasta aquí
PINSTRUCCIONES DE BIFURCACIÓNP
Mediante estas instrucciones el desarrollo lineal de un programa se interrumpe. Las bifurcaciones
o al flujo de un programa puede ser según el punto del programa en el que se ejecuta la
instrucción hacia adelante o hacia atrás. De esto se encargan las estructuras de control.
Para esto también vamos a usar los operadores lógicos o condicionales, estos son los mismos que
en PseInt pero se escriben de distintas formas:
Operadores Condicionales
&& AND
|| OR
ESTRUCTURAS DE CONTROL
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 mediante sentencias condicionales 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.
ESTRUCTURAS CONDICIONALES
Los condicionales son estructuras de control que cambian el flujo de ejecución de un programa de
acuerdo con si se cumple o no una condición. Cuando el flujo de control del programa llega al
condicional, el programa evalúa la condición y determina el camino a seguir. Existen dos tipos de
estructuras condicionales, las estructuras if / else y la estructura switch.
19
La teoría y el funcionamiento es IGUAL que en PseInt. ¿Qué
aprenderemos ahora? A “escribir” estas estructuras en Lenguaje Java.
IF/ELSE
La estructura if es la más básica de las estructuras de control de flujo. Esta estructura le indica al
programa que ejecute cierta parte del código sólo si la condición evaluada es verdadera («true»).
La forma más simple de esta estructura es la siguiente:
if(<condición>){
<sentencias>
}
En donde, <condición> es una expresión condicional cuyo resultado luego de la evaluación es un
dato booleano(lógico) verdadero o falso. El bloque de instrucciones <sentencias> se ejecuta si, y
sólo si, la expresión (que debe ser lógica) se evalúa a true, es decir, se cumple la condición.
Luego, en caso de que la condición no se cumpla y se quiera ejecutar otro bloque de código, otra
forma de expresar esta estructura es la siguiente:
if(<condición>){
<sentencias A>
} else {
<sentencias B>
}
El flujo de control del programa funciona de la misma manera, cuando se ejecuta la estructura if,
se evalúa la expresión condicional, si el resultado de la condición es verdadero se ejecutan las
sentencias que se encuentran contenidas dentro del bloque de código if (<sentencias A>).
Contrariamente, se ejecutan las sentencias contenidas dentro del bloque else (<sentencias B>).
En muchas ocasiones, se anidan estructuras alternativas if-else, de forma que se pregunte por una
condición si anteriormente no se ha cumplido otra y así sucesivamente.
if (<condicion1>) {
<sentencias A>
} else if(<condicion2>){
<sentencias B>
} else {
<sentencias C>
}
20
EJERCICIO 6
Implementar un programa que le pida dos números enteros a usuario y determine si ambos o
alguno de ellos es mayor a 25.
SWITCH
El bloque switch evalúa qué valor tiene la variable, y de acuerdo con el valor que posee ejecuta
las sentencias del bloque case correspondiente, es decir, del bloque case que cumpla con el valor
de la variable que se está evaluando dentro del switch.
switch(<variable>) {
case <valor1>:
<sentencias1>
break;
case <valor2>:
<sentencias2>
break;
default:
<sentencias3>
}
21
El uso de la sentencia break que va detrás de cada case termina la sentencia switch que la
envuelve, es decir que el control de flujo del programa continúa con la primera sentencia que se
encuentra a continuación del cierre del bloque switch. Si el programa comprueba que se cumple
el primer valor (valor1) se ejecutará el bloque de instrucciones <sentencias1>, pero si no se
encuentra inmediatamente la sentencia break también se ejecutarían las instrucciones
<sentencias2>, y así sucesivamente hasta encontrarse con la palabra reservada break o llegar al
final de la estructura.
Las instrucciones dentro del bloque default se ejecutan cuando la variable que se está evaluando
no coincide con ninguno de los valores case. Esta sentencia equivale al else de la estructura if-
else.
EJERCICIO 7
Considera que estás desarrollando una web para una empresa que fabrica motores (suponemos
que se trata del tipo de motor de una bomba para mover fluidos). Definir una variable tipoMotor y
permitir que el usuario ingrese un valor entre 1 y 4. El programa debe mostrar lo siguiente:
o Si el tipo de motor es 1, mostrar un mensaje indicando “La bomba es una bomba de agua”.
o Si el tipo de motor es 4, mostrar un mensaje indicando “La bomba es una bomba de pasta
alimenticia”.
o Si no se cumple ninguno de los valores anteriores mostrar el mensaje “No existe un valor
válido para tipo de bomba”
22
Pueden encontrar un ejemplo de estructuras condicionales en Java en
tu Aula Virtual.
PESTRUCTURAS REPETITIVASP
Durante el proceso de creación de programas, es muy común, encontrarse con que una operación
o conjunto de operaciones deben repetirse muchas veces. Para ello es importante conocer las
estructuras de algoritmos que permiten repetir una o varias acciones, un número determinado de
veces.
Las estructuras que repiten una secuencia de instrucciones un número determinado de veces se
denominan bucles, y se denomina iteración al hecho de repetir la ejecución de una secuencia de
acciones.
Todo bucle tiene que llevar asociada una condición, que es la que va a determinar cuándo se
repite el bucle y cuando deja de repetirse.
SENTENCIAS DE SALTO
En Java existen dos formas de realizar un salto incondicional en el flujo “normal” de un programa.
A saber, las instrucciones break y continue.
BREAK
La instrucción break sirve para abandonar una estructura de control, tanto de las condicionales (if-
else y switch) como de las repetitivas (for, do-while 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 contenida y
continua con el programa.
CONTINUE
La sentencia continue corta la iteración en donde se encuentra el continue, pero en lugar de salir
del bucle, continúa con la siguiente iteración. La instrucción continue transfiere el control del
programa desde la instrucción continue directamente a la cabecera del bucle (for, do-while o
while) donde se encuentra.
23
Pueden encontrar un ejemplo de sentencias de salto en Java en tu Aula
Virtual.
WHILE
La estructura while ejecuta un bloque de instrucciones mientras se cumple una condición. La
condición se comprueba antes de empezar a ejecutar por primera vez el bucle, por lo tanto, si la
condición se evalúa a «false» en la primera iteración, entonces el bloque de instrucciones no se
ejecutará ninguna vez.
while (<condición>) {
<sentencias>
}
EJERCICIO 8
Escriba un programa que valide si una nota está entre 0 y 10, sino está entre 0 y 10 la nota se
pedirá de nuevo hasta que la nota sea correcta.
24
Revisemos lo aprendido hasta aquí
DO / WHILE
En este tipo de bucle, el bloque instrucciones se ejecuta siempre al menos una vez. El bloque de
instrucciones se ejecutará mientras la condició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 condición
se evalúe a «false», de lo contrario el bucle será infinito.
do {
<sentencias>
} while (<condición>);
25
EJERCICIO 9
Escriba un programa que lea 20 números. Si el número leído es igual a cero se debe salir del
bucle y mostrar el mensaje "Se capturó el numero cero". El programa deberá calcular y mostrar el
resultado de la suma de los números leídos, pero si el número es negativo no debe sumarse.
Nota: recordar el uso de la sentencia break.
FOR
La estructura for proporciona una forma compacta de recorrer un rango de valores cuando la
cantidad de veces que se deber iterar un bloque de código es conocida. La forma general de la
estructura for se puede expresar del siguiente modo:
La expresión <inicialización> inicializa el bucle y se ejecuta una sola vez al iniciar el bucle. El bucle
termina cuando al evaluar la expresión <terminación> el resultado que se obtiene es false. La
expresión <incremento> se invoca después de cada iteración que realiza el bucle; esta expresión
incrementa o decrementa un valor hasta que se cumpla la condición de <terminación> del bucle.
26
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 veces que se ejecutará el
bucle, pero se sabe que por lo menos se ha de ejecutar una. Se utilizará el bucle while cuando es
posible que no deba ejecutarse ninguna vez.
Resultado:
Recuerdas el atajo del sout, vamos a probar lo mismo con el bucle for.
Al escribir for y tabular nos va a generar automáticamente un bucle for.
Además, pueden encontrar un ejemplo de estructuras repetitivas en tu
Aula Virtual.
27
EJERCICIO 10
Realizar un programa que lea 4 números (comprendidos entre 1 y 20) e imprima el número
ingresado seguido de tantos asteriscos como indique su valor. Por ejemplo:
5 *****
3 ***
11 ***********
2 **
PSUBPROGRAMASP
Un método muy útil para solucionar un problema complejo es dividirlo en subproblemas —
problemas más sencillos— y a continuación dividir estos subproblemas en otros más simples,
hasta que los problemas más pequeños sean fáciles de resolver. Esta técnica de dividir el
problema principal en subproblemas se suele denominar “divide y vencerás”.
FUNCIONES
Las funciones o métodos son un conjunto de líneas de código (instrucciones), encapsulados en un
bloque, usualmente según los parámetros definidos en la función, esta recibe argumentos, cuyos
valores se utilizan para efectuar operaciones y adicionalmente retornan un valor. En otras
palabras, una función según sus parámetros puede recibir argumentos (algunas no reciben nada),
hace uso de dichos valores recibidos como sea necesario y retorna un valor usando la instrucción
return, si no retorna es otro tipo de función. Los tipos que pueden usarse en la función son: int,
doble, long, boolean, String y char.
28
A estas funciones les vamos a asignar un tipo de acceso y un modificador. Estos dos conceptos
los vamos a ver mejor más adelante, pero por ahora siempre vamos a crear las funciones con el
acceso public y el modificador static. Para saber más sobre estos dos temas, leer la explicación
del método main.
• El tipo de valor que se retorna en una función debe coincidir con el del tipo declarado a la
función, es decir si se declara int, el valor retornado debe ser un número entero.
29
EJERCICIO 11
Escribir un programa que procese una secuencia de caracteres ingresada por teclado y terminada
en punto, y luego codifique la palabra o frase ingresada de la siguiente manera: cada vocal se
reemplaza por el carácter que se indica en la tabla y el resto de los caracteres (incluyendo a las
vocales acentuadas) se mantienen sin cambios.
a e i o u
@ # $ % *
Por ejemplo, si el usuario ingresa: Ayer, lunes, salimos a las once y 10.
La salida del programa debería ser: @y#r, l*n#s, s@l$m%s @ l@s %nc# y 10.
• Diseñar funciones
• Nombrarlas correctamente
30
PROCEDIMIENTOS (FUNCIONES SIN RETORNO)
Los procedimientos son básicamente un conjunto de instrucciones que se ejecutan sin retornar
ningún valor, hay quienes dicen que un procedimiento no recibe valores o argumentos, sin
embargo, en la definición no hay nada que se lo impida. En el contexto de Java un procedimiento
es básicamente una función cuyo tipo de retorno es void, los que indica que devuelven ningún
resultado.
• Si una función tiene más de un parámetro cada uno de ellos debe ir separado por una
coma.
• Los argumentos de una función también tienen un tipo y un nombre que los identifica. El
tipo del argumento puede ser cualquiera y no tiene relación con el tipo del método.
• Al recibir un argumento nada nos obliga a hacer uso de éste al interior del método, sin
embargo, para que recibirlo si no lo vamos a usar.
• En java los argumentos que sean variables de tipos primitivos (int, double, char, etc.) se
van a pasar por valor, mientras que los objetos (String, Integer, etc.) y los arreglos se van a
pasar por referencia. Nota: el concepto de objetos lo vamos a ver más adelante.
31
EJERCICIO 12
Crea un procedimiento EsMultiplo que reciba los dos números pasados por el usuario, validando
que el primer numero múltiplo del segundo y e imprima si el primer numero es múltiplo del
segundo, sino informe que no lo son.
• Diseñar procedimientos
• Nombrarlos correctamente
32
Al igual que la declaración de otros tipos de variables, la declaración de un arreglo tiene dos
componentes: el tipo de dato del arreglo y su nombre. El tipo de dato del arreglo se escribe como
tipo[], en donde, tipo es el tipo de dato de cada elemento contenido en él. Los corchetes sirven
para indicar que esa variable va a ser un arreglo. El tamaño del arreglo no es parte de su tipo (es
por esto que los corchetes están vacíos).
Una vez declarado un arreglo hay que crearlo/dimensionarlo, es decir, hay que asignar al arreglo
un tamaño para almacenar los valores. La creación de un arreglo se hace con el operador new.
Recordemos que las matrices son bidimensionales por lo que tienen dos tamaños, uno para las
filas y otro para las columnas de la matriz.
EJERCICIO 13
Crea un vector llamado ‘Equipo’ cuya dimensión sea la cantidad de compañeros de equipo y
define su tipo de dato de tal manera que te permita alojar sus nombres más adelante.
33
ASIGNAR ELEMENTOS A UN ARREGLO
Cuando queremos ingresar un elemento en nuestro arreglo vamos a tener que elegir el subíndice
en el que lo queremos guardar. Una vez que tenemos el subíndice decidido tenemos que invocar
nuestro vector por su nombre y entre corchetes el subíndice en el que lo queremos guardar.
Después, pondremos el signo de igual (que es el operador de asignación) seguido del elemento a
guardar. En las matrices vamos a necesitar dos subíndices y dos corchetes para representar la
posición de la fila y la columna donde queremos guardar el elemento.
Asignación de un Vector
vector[0] = 5;
Asignación de una Matriz
matriz[0][0] = 6;
Esta forma de asignación implica asignar todos los valores de nuestro arreglo de uno en uno, esto
va a conllevar un trabajo bastante grande dependiendo del tamaño de nuestro arreglo.
Entonces, para poder asignar varios valores a nuestro arreglo y no hacerlo de uno en uno usamos
un bucle Para. El bucle Para, al poder asignarle un valor inicial y un valor final a una variable,
podemos adaptarlo fácilmente a nuestros arreglos. Ya que, pondríamos el valor inicial de nuestro
arreglo y su valor final en las respectivas partes del Para. Nosotros, usaríamos la variable creada
en el Para, y la pasaríamos a nuestro arreglo para representar todos los subíndices del arreglo, de
esa manera, recorriendo todas las posiciones y asignándole a cada posición un elemento.
Para poder asignar varios elementos a nuestra matriz, usaríamos dos bucles Para anidados., ya
que un Para recorrerá las filas (variable i) y otro las columnas (variable j).
Asignación de un Vector
vector[i] = 5;
}
Asignación de una Matriz
matriz[i][j] = 6;
34
Vector:
Matriz:
35
EJERCICIO 14
Utilizando un Bucle for, aloja en el vector Equipo, los nombres de tus compañeros de equipo
}
A diferencia de Pseint, en Java si podemos devolver un vector o una matriz en una función para
usarla en otro momento. Lo que hacemos es poner como tipo de dato de la función, el tipo de
dato que tendra el vector y asi poder devolverlo.
return vector;
36
PCLASES DE UTILIDADP
Dentro del API de Java existe una gran colección de clases que son muy utilizadas en el desarrollo
de aplicaciones. Las clases de utilidad son clases que definen un conjunto de métodos que
realizan funciones, normalmente muy reutilizadas. Estas nos van a ayudar junto con las estructuras
de control, a lograr resolver problemas de manera más sencilla.
Entre las clases de utilidad de Java más utilizadas y conocidas están las siguientes: Arrays, String,
Integer, Math, Date, Calendar y GregorianCalendar. En esta guía solo vamos a ver la Math, String
para hacer algunos ejercicios y después veremos el resto en mayor profundidad.
CLASE STRING
Método Descripción.
37
length() Retorna la longitud de la cadena
Java al ser un lenguaje de tipado estático, requiere que para pasar una variable de un tipo de dato
a otro necesitemos usar un conversor. Por lo que, para convertir cualquier tipo de dato a un String,
utilicemos la función valueOf(n).
Ejemplo:
int numEntero = 4;
Ejemplo:
38
CLASE MATH
En ocasiones nos vemos en la necesidad de incluir cálculos, operaciones, matemáticas,
estadísticas, etc en nuestros programas Java.
Es cierto que muchos cálculos se pueden hacer simplemente utilizando los operadores
aritméticos que java pone a nuestra disposición, pero existe una opción mucho más sencilla de
utilizar, sobre todo para cálculos complicados. Esta opción es la clase Math del paquete java.lang.
La clase Math nos ofrece numerosos y valiosos métodos y constantes estáticos, que podemos
utilizar tan sólo anteponiendo el nombre de la clase.
Método Descripción.
pow(double a, double b) Devuelve el valor del primer argumento elevado a la potencia del
segundo argumento.
random() Devuelve un double con un signo positivo, mayor o igual que 0.0 y
menor que 1.0.
39
sqrt(double a) Devuelve la raíz cuadrada positiva correctamente redondeada de un
double.
El método random podemos utilizarlo para generar números al azar. El rango o margen con el
que trabaja el método random oscila entre 0.0 y 1.0 (Este último no incluido)
Por lo tanto, para generar un número entero entre 0 y 9, hay que escribir la siguiente sentencia:
40
PEJERCICIOS DE APRENDIZAJEP
A partir de ahora comenzaremos a aprender cómo los mismos algoritmos que diseñamos en
PSeInt podemos escribirlos también en Java, simplemente haciendo una traducción de cada una
de las estructuras de control vistas en PSeInt a Java.
Si bien en esta guía se proponen nuevos problemas, se sugiere que los mismos ejercicios ya
implementados en PSeInt sean traducidos al lenguaje de programación Java.
VIDEOS: Te sugerimos ver los videos relacionados con este tema, antes de empezar los
ejercicios, los podrás encontrar en tu aula virtual o en nuestro canal de YouTube.
1. Escribir un programa que pida dos números enteros por teclado y calcule la suma de los
dos. El programa deberá después mostrar el resultado de la suma
2. Escribir un programa que pida tu nombre, lo guarde en una variable y lo muestre por
pantalla.
3. Escribir un programa que pida una frase y la muestre toda en mayúsculas y después toda
en minúsculas. Nota: investigar la función toUpperCase() y toLowerCase() en Java.
5. Escribir un programa que lea un número entero por teclado y muestre por pantalla el
doble, el triple y la raíz cuadrada de ese número. Nota: investigar la función Math.sqrt().
Condicionales en Java
7. Crear un programa que pida una frase y si esa frase es igual a “eureka” el programa
pondrá un mensaje de Correcto, sino mostrará un mensaje de Incorrecto. Nota: investigar
la función equals() en Java.
8. Realizar un programa que solo permita introducir solo frases o palabras de 8 de largo. Si el
usuario ingresa una frase o palabra de 8 de largo se deberá de imprimir un mensaje por
pantalla que diga “CORRECTO”, en caso contrario, se deberá imprimir “INCORRECTO”.
Nota: investigar la función Lenght() en Java.
9. Escriba un programa que pida una frase o palabra y valide si la primera letra de esa frase
es una ‘A’. Si la primera letra es una ‘A’, se deberá de imprimir un mensaje por pantalla que
diga “CORRECTO”, en caso contrario, se deberá imprimir “INCORRECTO”. Nota: investigar
la función Substring y equals() de Java.
41
Bucles y sentencias de salto break y continue
10. Escriba un programa en el cual se ingrese un valor límite positivo, y a continuación solicite
números al usuario hasta que la suma de los números introducidos supere el límite inicial.
11. Realizar un programa que pida dos números enteros positivos por teclado y muestre por
pantalla el siguiente menú:
MENU
1. Sumar
2. Restar
3. Multiplicar
4. Dividir
5. Salir
Elija opción:
El usuario deberá elegir una opción y el programa deberá mostrar el resultado por pantalla
y luego volver al menú. El programa deberá ejecutarse hasta que se elija la opción 5.
Tener en cuenta que, si el usuario selecciona la opción 5, en vez de salir del programa
directamente, se debe mostrar el siguiente mensaje de confirmación: ¿Está seguro que
desea salir del programa (S/N)? Si el usuario selecciona el carácter ‘S’ se sale del
programa, caso contrario se vuelve a mostrar el menú.
12. Realizar un programa que simule el funcionamiento de un dispositivo RS232, este tipo de
dispositivo lee cadenas enviadas por el usuario. Las cadenas deben llegar con un formato
fijo: tienen que ser de un máximo de 5 caracteres de largo, el primer carácter tiene que ser
X y el último tiene que ser una O.
13. Dibujar un cuadrado de N elementos por lado utilizando el carácter “*”. Por ejemplo, si el
cuadrado tiene 4 elementos por lado se deberá dibujar lo siguiente:
****
* *
* *
****
42
Vectores y Matrices en Java
14. Crea una aplicación que a través de una función nos convierta una cantidad de euros
introducida por teclado a otra moneda, estas pueden ser a dólares, yenes o libras. La
función tendrá como parámetros, la cantidad de euros y la moneda a converir que será
una cadena, este no devolverá ningún valor y mostrará un mensaje indicando el cambio
(void).
* 0.86 libras es un 1 €
* 1.28611 $ es un 1 €
* 129.852 yenes es un 1 €
Funciones en Java
15. Realizar un algoritmo que rellene un vector con los 100 primeros números enteros y los
muestre por pantalla en orden descendente.
16. Realizar un algoritmo que rellene un vector de tamaño N con valores aleatorios y le pida al
usuario un numero a buscar en el vector. El programa mostrará donde se encuentra el
numero y si se encuentra repetido
17. Recorrer un vector de N enteros contabilizando cuántos números son de 1 dígito, cuántos
de 2 dígitos, etcétera (hasta 5 dígitos).
19. Realice un programa que compruebe si una matriz dada es anti simétrica. Se dice que una
matriz A es anti simétrica cuando ésta es igual a su propia traspuesta, pero cambiada de
signo. Es decir, A es anti simétrica si A = -AT. La matriz traspuesta de una matriz A se
denota por AT y se obtiene cambiando sus filas por columnas (o viceversa).
43
20. Un cuadrado mágico 3 x 3 es una matriz 3 x 3 formada por números del 1 al 9 donde la
suma de sus filas, sus columnas y sus diagonales son idénticas. Crear un programa que
permita introducir un cuadrado por teclado y determine si este cuadrado es mágico o no.
El programa deberá comprobar que los números introducidos son correctos, es decir,
están entre el 1 y el 9.
21. Dadas dos matrices cuadradas de números enteros, la matriz M de 10x10 y la matriz P de
3x3, se solicita escribir un programa en el cual se compruebe si la matriz P está contenida
dentro de la matriz M. Para ello se debe verificar si entre todas las submatrices de 3x3 que
se pueden formar en la matriz M, desplazándose por filas o columnas, existe al menos una
que coincida con la matriz P. En ese caso, el programa debe indicar la fila y la columna de
la matriz M en la cual empieza el primer elemento de la submatriz P.
Ejemplo:
44
PEJERCICIOS DE APRENDIZAJE EXTRAP
Estos van a ser ejercicios para reforzar los conocimientos previamente vistos. Estos pueden
realizarse cuando hayas terminado la guía y tengas una buena base sobre lo que venimos
trabajando. Además, si ya terminaste la guía y te queda tiempo libre en las mesas, podes continuar
con estos ejercicios extra, recordando siempre que no es necesario que los termines para
continuar con el tema siguiente. Por ultimo, recordá que la prioridad es ayudar a los compañeros
de la mesa y que cuando tengas que ayudar, lo más valioso es que puedas explicar el ejercicio
con la intención de que tu compañero lo comprenda, y no sólo mostrarlo. ¡Muchas gracias!
3. Elaborar un algoritmo en el cuál se ingrese una letra y se detecte si se trata de una vocal.
Caso contrario mostrar un mensaje. Nota: investigar la función equals() de la clase String.
o Los socios tipo ‘A’ abonan una cuota mayor, pero tienen un 50% de descuento en
todos los tipos de tratamientos.
o Los socios tipo ‘B’ abonan una cuota moderada y tienen un 35% de descuento para
los mismos tratamientos que los socios del tipo A.
o Los socios que menos aportan, los de tipo ‘C’, no reciben descuentos sobre dichos
tratamientos.
o Solicite una letra (carácter) que representa la clase de un socio, y luego un valor
real que represente el costo del tratamiento (previo al descuento) y determine el
importe en efectivo a pagar por dicho socio.
7. Realice un programa que calcule y visualice el valor máximo, el valor mínimo y el promedio
de n números (n>0). El valor de n se solicitará al principio del programa y los números
serán introducidos por el usuario. Realice dos versiones del programa, una usando el
bucle “while” y otra con el bucle “do - while”.
8. Escriba un programa que lea números enteros. Si el número es múltiplo de cinco debe
detener la lectura y mostrar la cantidad de números leídos, la cantidad de números pares y
la cantidad de números impares. Al igual que en el ejercicio anterior los números
negativos no deben sumarse. Nota: recordar el uso de la sentencia break.
45
9. Simular la división usando solamente restas. Dados dos números enteros mayores que
uno, realizar un algoritmo que calcule el cociente y el residuo usando sólo restas. Método:
Restar el dividendo del divisor hasta obtener un resultado menor que el divisor, este
resultado es el residuo, y el número de restas realizadas es el cociente.
10. Realice un programa para que el usuario adivine el resultado de una multiplicación entre
dos números generados aleatoriamente entre 0 y 10. El programa debe indicar al usuario
si su respuesta es o no correcta. En caso que la respuesta sea incorrecta se debe permitir
al usuario ingresar su respuesta nuevamente. Para realizar este ejercicio investigue como
utilizar la función Math.random() de Java.
11. Escribir un programa que lea un número entero y devuelva el número de dígitos que
componen ese número. Por ejemplo, si introducimos el número 12345, el programa
deberá devolver 5. Calcular la cantidad de dígitos matemáticamente utilizando el operador
de división. Nota: recordar que las variables de tipo entero truncan los números o
resultados.
12. Necesitamos mostrar un contador con 3 dígitos (X-X-X), que muestre los números del 0-0-
0 al 9-9-9, con la particularidad que cada vez que aparezca un 3 lo sustituya por una E.
Ejemplo:
0-0-0
0-0-1
0-0-2
0-0-E
0-0-4
0-1-2
0-1-E
13. Crear un programa que dibuje una escalera de números, donde cada línea de números
comience en uno y termine en el número de la línea. Solicitar la altura de la escalera al
usuario al comenzar. Ejemplo: si se ingresa el número 3:
1
12
123
46
14. Se dispone de un conjunto de N familias, cada una de las cuales tiene una M cantidad de
hijos. Escriba un programa que pida la cantidad de familias y para cada familia la cantidad
de hijos para averiguar la media de edad de los hijos de todas las familias.
15. Crea una aplicación que le pida dos números al usuario y este pueda elegir entre sumar,
restar, multiplicar y dividir. La aplicación debe tener una función para cada operación
matemática y deben devolver sus resultados para imprimirlos en el main.
16. Diseñe una función que pida el nombre y la edad de N personas e imprima los datos de
las personas ingresadas por teclado e indique si son mayores o menores de edad.
Después de cada persona, el programa debe preguntarle al usuario si quiere seguir
mostrando personas y frenar cuando el usuario ingrese la palabra “No”.
17. Crea una aplicación que nos pida un número por teclado y con una función se lo pasamos
por parámetro para que nos indique si es o no un número primo, debe devolver true si es
primo, sino false.
Un número primo es aquel solo puede dividirse entre 1 y si mismo. Por ejemplo: 25 no es
primo, ya que 25 es divisible entre 5, sin embargo, 17 si es primo.
Básicamente, un número primo es un número natural que tiene solo dos divisores o
factores: 1 y el mismo número. Es decir, es primo aquel número que se puede dividir por
uno y por el mismo número.
El primer número primo es 2, y hay 25 números primos entre 1 y 100, ellos son: 2, 3, 5, 7, 11,
13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89 y 97.
18. Realizar un algoritmo que calcule la suma de todos los elementos de un vector de tamaño
N, con los valores ingresados por el usuario.
19. Escriba un programa que averigüe si dos vectores de N enteros son iguales (la
comparación deberá detenerse en cuanto se detecte alguna diferencia entre los
elementos).
20. Crear una función rellene un vector con números aleatorios, pasándole un arreglo por
parámetro. Después haremos otra función o procedimiento que imprima el vector.
21. Los profesores del curso de programación de Egg necesitan llevar un registro de las notas
adquiridas por sus 10 alumnos para luego obtener una cantidad de aprobados y
desaprobados. Durante el periodo de cursado cada alumno obtiene 4 notas, 2 por trabajos
prácticos evaluativos y 2 por parciales. Las ponderaciones de cada nota son:
Una vez cargadas las notas, se calcula el promedio y se guarda en el arreglo. Al final del
programa los profesores necesitan obtener por pantalla la cantidad de aprobados y
desaprobados, teniendo en cuenta que solo aprueban los alumnos con promedio mayor o
igual al 7 de sus notas del curso.
47
22. Realizar un programa que rellene una matriz de tamaño NxM con valores aleatorios y
muestre la suma de sus elementos.
23. Construya un programa que lea 5 palabras de mínimo 3 y hasta 5 caracteres y, a medida
que el usuario las va ingresando, construya una “sopa de letras para niños” de tamaño de
20 x 20 caracteres. Las palabras se ubicarán todas en orden horizontal en una fila que
será seleccionada de manera aleatoria. Una vez concluida la ubicación de las palabras,
rellene los espacios no utilizados con un número aleatorio del 0 al 9. Finalmente imprima
por pantalla la sopa de letras creada.
Nota: Para resolver el ejercicio deberá investigar cómo se utilizan las siguientes funciones
de Java substring(), Length() y Math.random().
24. Realizar un programa que complete un vector con los N primeros números de la sucesión
de Fibonacci. Recordar que la sucesión de Fibonacci es la sucesión de los siguientes
números:
Donde cada uno de los números se calcula sumando los dos anteriores a él. Por ejemplo:
Y la del 5 es (2+3),
Y así sucesivamente…
Por lo tanto, si queremos calcular el término “n” debemos escribir una función que reciba
como parámetro el valor de “n” y que calcule la serie hasta llegar a ese valor.
48