5 - Guía Intro Java
5 - Guía Intro Java
5 - 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.
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”.
/*
*/
2
package primerprograma;
System.out.println("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.
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.
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.
3
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
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.
4
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.
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.
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.
5
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.
<tipo_de_dato> <nombre_variable>;
6
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.
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.
7
VALORES POR DEFECTO
En Java no siempre es necesario asignar valores cuando nuevos atributos son declarados.
Cuando los atributos son declarados, pero no inicializados, el compilador les asignará un
valor por defecto. A grandes rasgos el valor por defecto será cero o null dependiendo del
tipo de dato. La siguiente tabla resume los valores por defecto dependiendo del tipo de
dato.
byte 0
short 0
int 0
long 0
float 0.0
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.
8
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
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 que
OPERADORES CONDICIONALES
&& AND
|| OR
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 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 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”);
11
LECTURA O ENTRADA EN JAVA
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.
int numero;
numero = leer.nextInt();
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.
12
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
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.
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>).
13
if (<condicion1>) {
<sentencias A>
} else if(<condicion2>){
<sentencias B>
} else {
<sentencias C>
}
Al contrario de la estructura if / else, la estructura switch permite cualquier cantidad de
rutas de ejecución posibles. Un switch funciona con los datos primitivos byte, short, char e
int. También funciona con Enumeraciones, tema que se verá más adelante en el curso, y
con unas cuantas clases especiales que «envuelven» a ciertos tipos primitivos: Character,
Byte, Short, e Integer (tema que trataremos cuando se profundice en Orientación a
Objetos).
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.
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
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>
}
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
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.
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.
17
• Una función, un método o un procedimiento pueden tener una cantidad infinita de
parámetros, es decir pueden tener cero, uno, tres, diez, cien o más parámetros.
Aunque habitualmente no suelen tener más de 4 o 5.
• 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.
Consejos acerca de return:
• 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.
• En el caso de los procedimientos (void) podemos usar la sentencia return pero sin
ningún tipo de valor, sólo la usaríamos como una manera de terminar la ejecución
del procedimiento.
18
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.
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;
19
Asignación de una Matriz
matriz[i][j] = 6;
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;
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.
20
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
length() Retorna la longitud de la 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
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:
22
CLASE MATH
En ocasiones nos vemos en la necesidad de incluir cálculos, operaciones, matemáticas,
estadísticas, etc en nuestro 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.
23
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:
Nota: pueden encontrar un ejemplo de las funciones de la clase String y Math en Moodle.
24
EJERCICIOS DE APRENDIZAJE
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.
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.
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.
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
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().
25
Condicionales en Java
8. 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. 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. 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:
12. 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
14. 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ú.
15. 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.
17. 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:
****
* *
* *
****
27
18. 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 **
19. 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).
Funciones en Java
20. Realizar un algoritmo que rellene un vector con los 100 primeros números enteros y
los muestre por pantalla en orden descendente.
21. 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
24. 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).
28
En este caso la matriz es anti simétrica.
26. 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:
29
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.
30
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. 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
31
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.
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.
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:
32
Primer Integrador 25%
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.
22. Realizar un programa que rellene una matriz de tamaño NxM con valores aleatorios
y muestre la suma de sus elementos.
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:
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.
33
34