Guía Intro Java
Guía Intro Java
Guía Intro Java
Introducción
a JAVA
FUNDAMENTOS DEL LENGUAJE
Introducción a Java
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.
COMPILADOR EN JAVA
Permite traducir todo un programa de una sola vez, haciendo una ejecución más rápida y
puede almacenarse para usarse luego sin volver a hacer la traducción. Los programas de
Java se compilan a un lenguaje intermedio, denominado ByteCode. Este código es
interpretado por la maquina virtual de Java (JVM) del entorno de ejecución (JRE) y así se
consigue la portabilidad en distintas plataformas.
1
ARCHIVO FUENTE EN JAVA
Un archivo fuente de la tecnología Java tiene la siguiente forma:
[<declaración_paquete>]
<declaración_importacion>*
<modificador>* <declaración_clase>{
<atributos>*
<constructores>*
<metodos>*
}
El siguiente programa Java muestra un mensaje en la consola con el texto “Hola Mundo”.
/*
* Este programa escribe el texto "Hola Mundo" en la consola * utilizando
el método System.out.println()
*/
package primerprograma;
En este programa se pueden identificar los siguientes elementos del lenguaje Java:
comentarios, paquete, definiciones de clase, definiciones de método y sentencias.
2
COMENTARIO
El programa comienza con un comentario. El delimitador de inicio de un comentario es /* y
el delimitador de fin de comentario es */.
El texto del primer comentario de este ejemplo seria: ‘Este programa escribe el texto “Hola
Mundo” en la consola utilizando el método System.out.println()'. 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.
PAQUETES
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.
El lenguaje de programación de la tecnología Java le provee la sentencia package como la
forma de agrupar clases relacionadas. La sentencia package tiene la siguiente forma:
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.
CLASES
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
}
3
MÉTODOS
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.
SENTENCIA
Son las unidades ejecutable 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.
4
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.
ELEMENTOS DE UN PROGRAMA
Los conceptos vistos previamente, son la estructura de un programa, pero también existen
los elementos de un programa. Estos son, básicamente, los componentes que van a
conformar las sentencias que podamos escribir en nuestro programa. Recordemos que
toda sentencia en nuestro programa debe terminar con el símbolo punto y coma Nos van a
ayudar para crear nuestro programa y resolver sus problemas. Estos elementos siempre
estarán dentro de un programa/algoritmo.
Los elementos de un programa son: identificadores, variables, constantes, operadores,
palabras reservadas.
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 nuestra palabras reservadas van a estar en ese idioma.
IDENTIFICADOR
Los identificadores son los nombres que se usan para identificar cada uno de los
elementos del lenguaje, como ser, los nombres de las variables, nombres de las clases,
interfaces, atributos y métodos de un programa. Si bien Java permite nombres de
identificadores tan largos que se desee, es aconsejable crearlos de forma que tengan
sentido y faciliten su interpretación. El nombre ideal para un identificador es aquel que no
se excede en longitud (lo más corto posible) 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.
5
DECLARACIÓN DE VARIABLES EN JAVA
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>;
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).
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.
6
Character El tipo de dato carácter es un simple carácter unicode de 16 bits. Su valor
mínimo es de '\u0000' (En entero es 0) y su valor máximo es de '\uffff' (En
entero es 65,535). Nota: un dato de tipo carácter se puede escribir entre
comillas simples, por ejemplo 'a', o también indicando su valor Unicode, por
ejemplo '\u0061'.
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.
byte 0
short 0
int 0
long 0
float 0.0
7
double 0.0
boolean false
char '\u0000'
String null
Objetos null
OPERADORES
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.
OPERADOR DE ASIGNACIÓN
8
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
9
>= Mayor o igual que
Operadores Condicionales
&& AND
|| OR
?: Ternario
TIPOS DE INSTRUCCIONES
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:
10
✓ Instrucciones de escritura, se utilizan para escribir o mostrar mensajes o contenidos de
las variables en un dispositivo de salida.
INSTRUCCIONES PRIMITIVAS
Dentro de las instrucciones previamente vistas, existe un 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:
ESCRITURA EN JAVA
En nuestro ejemplo de más arriba 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”);
11
System.out.println(“La variable tiene el valor de: ” + variable);
Y si quisieramos escribir sin que haya saltos de linea, deberiamos quitarle el ln a nuestro
System.out.println.
System.out.print(“Hola”);
System.out.print(“Mundo”);
• 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 crear un objeto de clase Scanner, normalmente pasamos el objeto
predefinido System.in, que representa el flujo de entrada estándar.
• Se le puso el nombre leer, pero se le puede el nombre que nosotros quisiéramos.
• 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();
12
INSTRUCCIONES DE BIFURCACIÓN
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.
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 a 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
if(<condición>){
<sentencias>
}
if(<condición>){
<sentencias A>
} else {
<sentencias B>
}
13
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>
}
Switch
El bloque switch evalúa qué valor tiene la variable, y de acuerdo al 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.
14
ESTRUCTURAS REPETITIVAS
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.
While
while (<condición>) {
<sentencias>
}
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>);
La diferencia entre do-while y while es que do-while evalúa su condición al final del bloque
en lugar de hacerlo al inicio. Por lo tanto, el bloque de sentencia después del “do” siempre
se ejecutan al menos una vez.
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:
15
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.
La estructura for también ha sido mejorada para iterar de manera más compacta las
colecciones y los arreglos, tema que se verá más adelante en este curso. Esta versión
mejorada se conoce como for-each.
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 3bucle, 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.
Sentencias de Salto
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
SUBPROGRAMAS
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”.
16
El problema principal se soluciona por el correspondiente programa o algoritmo principal,
mientras que la solución de los subproblemas será a través de subprogramas, conocidos
como procedimientos o funciones. Un subprograma es un como un mini algoritmo, que
recibe los datos, necesarios para realizar una tarea, desde el programa y devuelve los
resultados de esa tarea.
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.
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.
/*
* Bloque de instrucciones
*/
return valor;
}
/*
* Bloque de instrucciones
*/
17
* 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.
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.
18
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;
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;
matriz[i][j] = 6;
19
VECTORES Y MATRICES EN SUBPROGRAMAS
Los arreglos se pueden pasar como parámetros a un subprograma (función o
procedimiento) del mismo modo que pasamos variables, poniendo el tipo de dato delante
del nombre del vector o matriz, pero deberemos sumarle las llaves para representar que es
un vector o matriz. Sin embargo, hay que tener en cuenta que la diferencia entre los
arreglos y las variables, es que como dijimos previamente los arreglos siempre se pasan
por referencia.
}
public static void mostrarMatriz(int[][] matriz){
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;
20
CLASES DE UTILIDAD
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
La clase String está orientada al manejo de cadenas de caracteres y pertenece al paquete
java.lang del API de Java. Los objetos que son instancias de la clase String, se pueden
crear a partir de cadenas constantes también llamadas literales, las cuales deben estar
contenidas entre comillas dobles. Una instancia de la clase String es inmutable, es decir,
una vez que se ha creado y se le ha asignado un valor, éste no puede modificarse
(añadiendo, eliminando o cambiando caracteres).
Al ser un objeto, una instancia de la clase String no sigue las normas de manipulación de
los datos de tipo primitivo con excepción del operador concatenación. El operador +
realiza una concatenación cuando, al menos, un operando es un String. El otro operando
puede ser de un tipo primitivo. El resultado es una nueva instancia de tipo String.
Método Descripción.
21
concat(String str) Concatena la cadena del parámetro al final de la
primera cadena.
replace(char oldChar, char newChar) Retorna una nueva cadena reemplazando los
caracteres del primer parámetro con el carácter del
segundo parámetro
substring(int beginIndex, int endIndex) Retorna la sub cadena desde el carácter del primer
parámetro hasta el carácter del segundo parámetro
22
toUpperCase() Retorna la cadena en mayúsculas
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;
String numCadena= String.valueOf(numEntero);
Ejemplo:
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.
23
max(double a, double b) Devuelve el mayor de dos valores double
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.
Por lo tanto, para generar un número entero entre 0 y 9, hay que escribir la siguiente
sentencia:
24
PREGUNTAS DE APRENDIZAJE
1) El archivo de un programa en Java debe terminar con la extensión de archivo:
a) .class
b) .java
c) .jar
d) Ninguna de las anteriores
6) Teniendo en cuenta que los paquetes y las clases son análogos a las carpetas y
archivos utilizados por el sistema operativo, ¿el nombre de la clase debe ser
diferente al del paquete?
a) Siempre
b) Nunca
c) No importa
d) Ninguna de las anteriores
25
8) El double se aplica para datos tipo:
a) Entero
b) Decimal
c) Carácter
d) Ninguno de los anteriores
PREGUNTAS EXTRA:
Investigar la documentación de la clase System y responder:
26
EJERCICIOS DE APRENDIZAJE
PRIMEROS PASOS
1. Instalando Java: La primera tarea que tenemos que llevar adelante es la instalación
del entorno de desarrollo.
Lo primero que haremos será instalar Java en nuestras computadoras. Para ello debemos
descargarlo a través del siguiente link:
Una vez instalado vamos a corroborar de que el entorno ha sido instalado de manera
correcta. En la consola ejecutaremos el siguiente comando:
java -version
ENTORNOS DE DESARROLLO
Una vez instalado Java procedemos a instalar un entorno de desarrollo que proporciona
una serie de servicios y herramientas integrales que tienen como fin facilitar las tareas de
desarrollo, testing e implementación de software. Para llevar adelante el curso
recomendamos instalar NetBeans, pero se puede utilizar cualquiera de los siguientes IDEs:
NetBeans IDE
27
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.
Para la realización cada uno de los siguientes ejercicios se debe definir una clase y colocar
toda la implementación dentro del método main() de dicha clase, tal cual se indica en el
video.
2. 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
6. 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().
9. 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.
10. 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.
28
11. 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.
12. 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:
13. 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.
15. 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ú.
29
16. 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.
18. 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
19. 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:
****
* *
* *
****
20. 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 **
30
21. 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).
22. Realizar un algoritmo que rellene un vector con los 100 primeros números enteros y
los muestre por pantalla en orden descendente.
23. 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
26. 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).
Ejemplo:
31
27. 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.
28. 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:
32
EJERCICIOS DE APRENDIZAJE EXTRA
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!
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.
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.
33
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”.
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. Por ejemplo: 50 / 13:
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. 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
13. 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.
34
14. 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.
15. 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”.
16. 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.
17. 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.
18. 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).
19. 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.
20. 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.
21. Realizar un programa que rellene una matriz de tamaño NxM con valores aleatorios
y muestre la suma de sus elementos.
35
22. 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().
23. 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:
La sucesión del número 2 se calcula sumando (1+1)
Análogamente, la sucesión del número 3 es (1+2),
Y la del 5 es (2+3),
Y así sucesivamente…
La sucesión de Fibonacci se puede formalizar de acuerdo a la siguiente fórmula:
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.
36