Java Intro - Java
Java Intro - Java
INTRODUCCION A
JAVA
FUNDAMENTOS DEL LENGUAJE
Objetivos de la Guí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
Descargado por Guillermo Paez ([email protected])
lOMoARcPSD|44735310
2
Descargado por Guillermo Paez ([email protected])
lOMoARcPSD|44735310
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
Descargado por Guillermo Paez ([email protected])
lOMoARcPSD|44735310
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
Descargado por Guillermo Paez ([email protected])
lOMoARcPSD|44735310
¿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:
5
Descargado por Guillermo Paez ([email protected])
lOMoARcPSD|44735310
Declaración de clase {
Cuerpo de clase
¿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:
6
Descargado por Guillermo Paez ([email protected])
lOMoARcPSD|44735310
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.
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
Descargado por Guillermo Paez ([email protected])
lOMoARcPSD|44735310
8
Descargado por Guillermo Paez ([email protected])
lOMoARcPSD|44735310
y que califique claramente el concepto que intenta representar en el contexto del problema que
se está resolviendo.
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>;
9
Descargado por Guillermo Paez ([email protected])
lOMoARcPSD|44735310
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.
10
Descargado por Guillermo Paez ([email protected])
lOMoARcPSD|44735310
¿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?
11
Descargado por Guillermo Paez ([email protected])
lOMoARcPSD|44735310
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
12
Descargado por Guillermo Paez ([email protected])
lOMoARcPSD|44735310
char '\u0000'
String Null
Objetos Null
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
13
Descargado por Guillermo Paez ([email protected])
lOMoARcPSD|44735310
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.
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
14
Descargado por Guillermo Paez ([email protected])
lOMoARcPSD|44735310
¿Como se ve en Java?
EJERCICIO 3
Define variables donde puedas alojar los resultados y prueba usar dos operadores de cada tipo.
15
Descargado por Guillermo Paez ([email protected])
lOMoARcPSD|44735310
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
16
Descargado por Guillermo Paez ([email protected])
lOMoARcPSD|44735310
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”);
EJERCICIO 4
Define una variable que aloje tu nombre y otra que guarde tu edad. Imprime ambas variables
por pantalla.
17
Descargado por Guillermo Paez ([email protected])
lOMoARcPSD|44735310
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(),
18
Descargado por Guillermo Paez ([email protected])
lOMoARcPSD|44735310
para leer un valor de tipo double(real), usamos nextDouble() y etc. Para leer un
String (cadenas), usamos nextLine().
int numero;
numero = leer.nextInt();
EJERCICIO 5
19
Descargado por Guillermo Paez ([email protected])
lOMoARcPSD|44735310
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();
}
}
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
20
Descargado por Guillermo Paez ([email protected])
lOMoARcPSD|44735310
&& 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.
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>
}
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>){
21
Descargado por Guillermo Paez ([email protected])
lOMoARcPSD|44735310
<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>
}
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.
22
Descargado por Guillermo Paez ([email protected])
lOMoARcPSD|44735310
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>
}
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.
23
Descargado por Guillermo Paez ([email protected])
lOMoARcPSD|44735310
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 no se cumple ninguno de los valores anteriores mostrar el mensaje “No existe un valor
válido para tipo de bomba”
24
Descargado por Guillermo Paez ([email protected])
lOMoARcPSD|44735310
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.
25
Descargado por Guillermo Paez ([email protected])
lOMoARcPSD|44735310
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.
26
Descargado por Guillermo Paez ([email protected])
lOMoARcPSD|44735310
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>);
27
Descargado por Guillermo Paez ([email protected])
lOMoARcPSD|44735310
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.
28
Descargado por Guillermo Paez ([email protected])
lOMoARcPSD|44735310
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.
29
Descargado por Guillermo Paez ([email protected])
lOMoARcPSD|44735310
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,
30
Descargado por Guillermo Paez ([email protected])
lOMoARcPSD|44735310
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.
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.
31
Descargado por Guillermo Paez ([email protected])
lOMoARcPSD|44735310
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
32
Descargado por Guillermo Paez ([email protected])
lOMoARcPSD|44735310
mostrarInfo(nombre, edad);
33
Descargado por Guillermo Paez ([email protected])
lOMoARcPSD|44735310
• 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.
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
34
Descargado por Guillermo Paez ([email protected])
lOMoARcPSD|44735310
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.
35
Descargado por Guillermo Paez ([email protected])
lOMoARcPSD|44735310
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.
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;
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
36
Descargado por Guillermo Paez ([email protected])
lOMoARcPSD|44735310
vector[i] = 5;
matriz[i][j] = 6;
Vector:
Matriz:
37
Descargado por Guillermo Paez ([email protected])
lOMoARcPSD|44735310
EJERCICIO 14
Utilizando un Bucle for, aloja en el vector Equipo, los nombres de tus compañeros de equipo
38
Descargado por Guillermo Paez ([email protected])
lOMoARcPSD|44735310
embargo, hay que tener en cuenta que la diferencia entre los arreglos y las variables, es que los
arreglos siempre se pasan por referencia.
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;
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.
39
Descargado por Guillermo Paez ([email protected])
lOMoARcPSD|44735310
40
Descargado por Guillermo Paez ([email protected])
lOMoARcPSD|44735310
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;
Si quisiéramos hacerlo al revés, de String a int se usa el método de la clase Integer, parseInt().
Ejemplo:
CLASE MATH
En ocasiones nos vemos en la necesidad de incluir cálculos, operaciones, matemáticas,
estadísticas, etc en nuestros programas Java.
41
Descargado por Guillermo Paez ([email protected])
lOMoARcPSD|44735310
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.
42
Descargado por Guillermo Paez ([email protected])
lOMoARcPSD|44735310
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:
PEJERCICIOS DE APRENDIZAJEP
43
Descargado por Guillermo Paez ([email protected])
lOMoARcPSD|44735310
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.
44
Descargado por Guillermo Paez ([email protected])
lOMoARcPSD|44735310
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.
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:
****
* *
45
Descargado por Guillermo Paez ([email protected])
lOMoARcPSD|44735310
* *
****
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).
46
Descargado por Guillermo Paez ([email protected])
lOMoARcPSD|44735310
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).
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:
47
Descargado por Guillermo Paez ([email protected])
lOMoARcPSD|44735310
48
Descargado por Guillermo Paez ([email protected])
lOMoARcPSD|44735310
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.
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.
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.
49
Descargado por Guillermo Paez ([email protected])
lOMoARcPSD|44735310
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
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.
50
Descargado por Guillermo Paez ([email protected])
lOMoARcPSD|44735310
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
51
Descargado por Guillermo Paez ([email protected])
lOMoARcPSD|44735310
desaprobados, teniendo en cuenta que solo aprueban los alumnos con promedio mayor o
igual al 7 de sus notas del curso.
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.
52
Descargado por Guillermo Paez ([email protected])
lOMoARcPSD|44735310
53
Descargado por Guillermo Paez ([email protected])