Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad


Java Ejercicios y caso practico, Apuntes de Programación Java

Se muestra a detalle ejercicios en el lenguaje de programacion java

Tipo: Apuntes

2016/2017

Subido el 16/02/2017

rodrigoh00per
rodrigoh00per 🇲🇽

4.4

(5)

1 documento

1 / 168

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
1
Java:
del Grano a su Mesa
A
A
An
n
nd
d
dr
r
ré
é
és
s
s
M
M
Mu
u
uñ
ñ
ño
o
oz
z
z
O
O
O.
.
.
V
Ve
er
rs
si
ió
ón
n
1
1.
.4
4
Java:
del Grano a su Mesa
(
Versión 1.4
)
Tabla de Contenidos
2
Tabla de Contenidos
TABLA DE CONTENIDOS 2
INTRODUCCIÓN 3
AGRADECIMIENTOS 4
CAPÍTULO I: PRINCIPIOS BÁSICOS DE JAVA 5
CAPÍTULO II: CONCEPTOS BÁSICOS 21
CAPÍTULO III: ENTRADA Y SALIDA 26
CAPÍTULO IV: ASIGNACIONES, EXPRESIONES Y TIPOS DE DATOS 30
CAPÍTULO V: MÉTODOS Y FUNCIONES 33
CAPÍTULO VI: CONDICIONALES 37
CAPÍTULO VII: CICLOS DE PROGRAMA 44
CAPÍTULO VIII: CADENAS DE TEXTO Y LITERALES 48
CAPÍTULO IX: PATRONES DE PROGRAMACIÓN 53
CAPÍTULO X: ARREGLOS Y MATRICES 53
CAPÍTULO XI: RECURSIVIDAD 53
CAPÍTULO XII: CLASES Y OBJETOS 53
CAPÍTULO XIII: ORDENAMIENTO Y BÚSQUEDA 53
CAPÍTULO XIV: ARCHIVOS DE TEXTO 53
CAPÍTULO XV: INTERFACES GRÁFICAS AWT 53
CAPÍTULO XVI: INTERFACES GRÁFICAS SWING 53
CAPÍTULO XVII: EXCEPCIONES Y CONTROL DE ERRORES 53
CAPÍTULO XVIII: TIPOS Y ESTRUCTURAS DE DATOS 53
CAPÍTULO XIX: ARCHIVOS DE ACCESO ALEATORIO 53
CAPÍTULO XX: BASES DE DATOS 53
CAPÍTULO XXI: CONCURRENCIA 53
CAPÍTULO XXII: INTERNETWORKING 53
CAPÍTULO XXIII: PAQUETES DE CLASES 53
CAPÍTULO XXIV: DISEÑO DE SOFTWARE UML 53
REFERENCIAS 53
Printed with FinePrint - purchase at www.fineprint.com
PDF created with pdfFactory trial version www.pdffactory.com
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31
pf32
pf33
pf34
pf35
pf36
pf37
pf38
pf39
pf3a
pf3b
pf3c
pf3d
pf3e
pf3f
pf40
pf41
pf42
pf43
pf44
pf45
pf46
pf47
pf48
pf49
pf4a
pf4b
pf4c
pf4d
pf4e
pf4f
pf50
pf51
pf52
pf53
pf54
pf55
pf56
pf57
pf58
pf59
pf5a
pf5b
pf5c
pf5d
pf5e
pf5f
pf60
pf61
pf62
pf63
pf64

Vista previa parcial del texto

¡Descarga Java Ejercicios y caso practico y más Apuntes en PDF de Programación Java solo en Docsity!

Java:

del Grano a su Mesa

Java: del Grano a su Mesa (Versión 1.4)

Tabla de Contenidos

  • Ve Verrssiióónn 11..4 A AAnnndddrrrééésss MMMuuuñññooozzz OOO...
    • TABLA DE CONTENIDOS Tabla de Contenidos
    • INTRODUCCIÓN
    • AGRADECIMIENTOS
    • CAPÍTULO I: PRINCIPIOS BÁSICOS DE JAVA
    • CAPÍTULO II: CONCEPTOS BÁSICOS
    • CAPÍTULO III: ENTRADA Y SALIDA
    • CAPÍTULO IV: ASIGNACIONES, EXPRESIONES Y TIPOS DE DATOS
    • CAPÍTULO V: MÉTODOS Y FUNCIONES
    • CAPÍTULO VI: CONDICIONALES
    • CAPÍTULO VII: CICLOS DE PROGRAMA
    • CAPÍTULO VIII: CADENAS DE TEXTO Y LITERALES
    • CAPÍTULO IX: PATRONES DE PROGRAMACIÓN
    • CAPÍTULO X: ARREGLOS Y MATRICES
    • CAPÍTULO XI: RECURSIVIDAD
    • CAPÍTULO XII: CLASES Y OBJETOS
    • CAPÍTULO XIII: ORDENAMIENTO Y BÚSQUEDA
    • CAPÍTULO XIV: ARCHIVOS DE TEXTO
    • CAPÍTULO XV: INTERFACES GRÁFICAS AWT
    • CAPÍTULO XVI: INTERFACES GRÁFICAS SWING
    • CAPÍTULO XVII: EXCEPCIONES Y CONTROL DE ERRORES
    • CAPÍTULO XVIII: TIPOS Y ESTRUCTURAS DE DATOS
    • CAPÍTULO XIX: ARCHIVOS DE ACCESO ALEATORIO
    • CAPÍTULO XX: BASES DE DATOS
    • CAPÍTULO XXI: CONCU RRENCIA
    • CAPÍTULO XXII: INTERNETWORKING
    • CAPÍTULO XXIII: PAQUETES DE CLASES
    • CAPÍTULO XXIV: DISEÑO DE SOFTWARE UML
    • REFERENCIAS

Introducción

Introducción Este documento está orientado al apoyo de personas que no tengan conocimiento con el lenguaje Java, ni tampoco con conceptos de programación.

Todos los capítulos están realizados con un formato de clases, plantenado primero una motivación que generalmente es un problema que es deseable resolver y que tiene su solución con los conceptos obtenidos a través del capítulo, luego el desarrollo del tema y por último algunos problemas resueltos y propuestos para practicar con los conceptos obtenidos.

Como está recopilado por clases de cátedra de un profesor de la Universidad de Chile, existe una posibilidad que hayan inconsistencias entre los capítulos, que serán solucionados en posteriores ediciones de este apunte.

Su uso es liberado a nivel académico, tanto por alumnos del curso de Computación I como profesores que deseen usar este material como apoyo a sus clases.

También, la idea es dar más herramientas en español para aquellos programadores inexpertos que están ingresando en el mundo de Java.

Introducción

Agradecimientos A mi esposa, Verónica, quien comprendió eternamente las largas noches en los cuales preparaba las clases del año 2001, 2002 y 2003 (las que faltaban).

Además, para mis alumnos del curso de CC10A – Computación I sección 03 del año 2001, de la Escuela de Ingeniería de la Universidad de Chile, quienes motivaron el desarrollo del contenido de este apunte.

También a mis alumnos del curso de CC10A – Computación I sección 03 del año 2002, gracias a quienes logré mejorar, completar información y compilarla en este apunte.

De manera especial, agradezco a Daniel Muñoz, quien me hizo reflexionar en el nombre de este apunte y cambiarlo desde su versión original “Java: Programación y Lenguaje” a “Java: del Grano a su Mesa”.

A Giselle, Pablo, Claudia y Marko quienes hicieron control de calidad de mi apunte.

Por último a los profesores y alumnos quienes utilizan este apunte, ya que gracias a ellos podré recibir comentarios y aportes a mi correo electrónico ([email protected]) para mejorar más aún su ayuda académica y computacional.

A todos, gracias.

Andrés Muñoz O. Ingeniero de Software Profesor Universidad de Chile

Printed with FinePrint - purchase at www.fineprint.com

Capítulo I: Principios Básicos de Java

Tipos de Clases Existen 2 tipos básicos de clases: Las clases ejecutables y las que no lo son.

La diferencia entre estas 2 clases radica físicamente en que algunas de ellas son invocadas desde otras clases. Por ejemplo, Console es una clase ( Console.class ) que es invocada o utilizada por la clase HolaMundo anteriormente vista.

Esta clase puede tener muchos métodos o funcionalidades, que son utilizadas dentro de los otros programas.

public class Console { public void print(String s) { ... } public void println(String s) { ... } public int readInt() { ... } public double readDouble() { ... } public long readLong() { ... } ... }

La clase HolaMundo es del tipo que se puede ejecutar, es decir, al tener el método main significa que lo que está dentro de los paréntesis de llave corresponde a lo ejecutable:

public class HolaMundo { static public void main (String[] args) { // EJECUTABLE Console c = new Console(); c.println(“Hola Mundo”); } }

Instrucciones

Cada línea en Java es conocida como una Instrucción , y significa que es lo que uno manda a realizar al computador en un determinado momento. Por ejemplo:

c.println(“Hola Mundo”); // Indica al computador que debe // imprimir en pantalla la frase // “HOLA MUNDO”

Todas las instrucciones llevan un separador al final: “;” (punto y coma). Este separador funciona como si se le indicara al computador DONDE termina una línea, ya que Java permite que en 1 línea física escribir más de una instrucción:

c.print(“Hola”); c.println(“ Mundo”);

Esta línea es equivalente a:

Capítulo I: Principios Básicos de Java

c.print(“Hola”); c.println(“ Mundo”);

ya que el “;” indica el fin de instrucción.

También es normal que uno pueda escribir una instrucción en más de una línea física, ya que el “;” es nuestro fin de instrucción:

c.println(“Hola“ + “ Mundo”);

Estas 2 línea son interpretadas por el computador como si fuesen una sola:

c.println(“Hola“ + “ Mundo”);

Bloques En Java se pueden agrupar las instrucciones en Bloques de instrucciones. Los bloques son delimitados por los paréntesis de llaves (“{“ y “}”).

Los métodos son bloques de programas que se ejecutan al ser invocados:

static public void main (String[] args) { Console c = new Console(); c.println(“Hola Mundo”); BLOQUE }

Las clases se componen de 2 partes: un encabezado y un cuerpo:

public class HolaMundo { ENCABEZADO static public void main (String[] args) { Console c = new Console(); c.println(“Hola Mundo”); CUERPO } }

El cuerpo de una clase es considerado un bloque de programa, ya que almacena múltiples bloques (métodos) y otras instrucciones. Los bloques también pueden almacenar otros bloques como en este caso.

Printed with FinePrint - purchase at www.fineprint.com

CAPÍTULO I: PRINCIPIOS BÁSICOS DE JAVA

Ejecución de un Programa Java

Definiremos plan de ejecución a las líneas que realmente son leídas y ejecutadas cuando uno invoca la clase que desea correr.

La ejecución de un programa en Java es lineal, y comienza SIEMPRE por el bloque de programa escrito dentro del método main. Al momento de ejecutar la clase, el bloque main comienza a ejecutar. Luego se realizan las llamadas necesarias a cualquier bloque o método:

import java.io.; class ejemplo{ //este programa calcula el factorial de un numero. static public int fact(int numero){ int factorial=1; for(int i=1; i<numero; i++){ factorial=factoriali; } return factorial; } static public void main(String args[]){ Console c=new Console(); c.print("Ingrese el numero a calcular: "); int numero=c.readInt(); int factorial = fact(numero); c.print("El factorial de:"+ numero+ " es:"+ factorial); } }

En este ejemplo, el plan de ejecución sería el siguiente:

1). [INICIO DEL PROGRAMA]

  1. Console c=new Console();
  2. c.print("Ingrese el numero a calcular: ");
  3. int numero=c.readInt();
  4. int factorial = [resultado del bloque siguiente] a) int factorial=1; b) for(int i=1; i<numero; i++) [repite el siguiente bloque] i) factorial=factorial*i; c) return factorial; [devuelve el valor del bloque al 4]
  5. c.print("El factorial de:"+ numero+ " es:"+ factorial); 7). [FIN DEL PROGRAMA]

Podemos notar que la ejecución es muy distinta a el órden en el cual se han escrito las líneas de código (instrucciones).

Capítulo I: Principios Básicos de Java

En la Práctica

La idea es que ahora que conocemos como se escriben los programas, podamos saber también como llegar a que se ejecuten también.

Qué necesitas para programar Es muy necesario utilizar el Java Develpment Kit (JDK) adecuado para las necesidades que tengas. Para efectos del curso, nosotros utilizaremos el JDK 1.1.8 o 1.3.0, pero nada superior a eso, ya que las funcionalidades de la Console pueden verse afectadas por otras versiones^2.

El JDK es un compilador y ejecutor de programas Java a través de algo que se llama Java Virtual Machine (JVM) y que es como un computador pero que solo entiende Java.

Para que tu computador tenga una JVM, es necesario que descargues el JDK y lo instales en tu computador. En el caso de la escuela se encuentra instalado el JDK 1.3.0 y las funcionalidades se ven bastante bien, pero recomendamos que instales el JDK 1.1.8 o 1.2.2.

El JDK lo puedes descargar de la página oficial de Java de Sun Microsystems (http://java.sun.com) o desde la página de ayuda de la página del curso.

Luego que lo tengas en tu computador, instala el software y “voila”. Con esto ya tienes lo necesario para comenzar tu aventura.

Como escribir un programa Para escribir un programa lo primero que se necesita es un editor de texto. El mas simple y que viene de manera predeterminada con windows es Notepad (Bloc de Notas), pero cada quien es libre de usar el que mas le acomode (UltraEdit, Textpad, Jolie, etc).

El icono de notepad se encuentra en el menú: MENU INICIO è ACCESORIOS è Bloc de Notas (Notepad)

Y el abrirlo se ve una ventana como la siguiente:

(^2) Si te atreves a probar en otra versión del JDK queda estrictamente bajo tu responsabilidad.

Printed with FinePrint - purchase at www.fineprint.com

Capítulo I: Principios Básicos de Java

Luego debemos abrir una ventana de MS-DOS y colocarnos en el directorio donde se encuentra nuestro archivo ejemplo.java mediante el comando “cd”. Ejemplo:

Una vez ubicados en el directorio llamamos al comando compilador del programa:

El cual, si todo esta bien, y generalmente no lo esta (karma computin), generara el archivo ejemplo.class que contendrá el programa ya compilado, es decir, en un lenguaje que el computador si puede comprender.

Si todo está bien, volverá a mostrar la línea de comando sin poner nada en pantalla:

C:\WINDOWS\Desktop\temp>

y en el directorio donde están los programas, generar el archivo ejemplo.class.

Capítulo I: Principios Básicos de Java

En caso de que no se ejecute el comando javac, es probable que sea o porque java no esta instalado en el computador, o porque nuestro PATH, no apunta al directorio donde esta el comando java. En este caso, deberás poner lo siguiente y volver a compilar:

set PATH = %PATH%;C:\jdk1.1.8\bin

Como ejecutar un programa. Una vez compilado el programa y ahora que tenemos el archivo “ejemplo.class”, podemos proceder a ejecutarlo. Aquí suelen ocurrir cosas inesperadas, pero con paciencia también se pueden arreglar.

Lo cual ejecutará el programa ejemplo. Debemos hacer hincapié en que el nuevo comando se llama java , y no javac (javac ó java compiler), y que no se ejecuta: “java ejemplo.class”, sino que solamente “java ejemplo”.

Printed with FinePrint - purchase at www.fineprint.com

Capítulo I: Principios Básicos de Java

Los Errores en Java Lo más común cuando escribimos programas en Java es que tengamos errores. Existen 2 tipo de errores: de compilación y de ejecución :

Errores de Compilación

Los errores de compilación son aquellos que salen cuando estamos compilando (usando javac ) nuestro archivo .java. Por ejemplo, veamos el siguiente programa con errores:

clas EjemploDeError { static void main (String[] args) { Console c = new Console(); c.println ("Aquí le falta un punto y coma") c.println ("Esta línea está ok"); } }

Nótese que hemos deliberadamente puesto clas en vez de class en la definición de la clase, y en la línea 4 hemos dejado sin ; al final de ella. También no hemos puesto las clases de la consola para que veamos qué ocurre.

Si lo escribimos y lo intentamos compilar en java obtendremos el siguiente error:

C:\WINDOWS\Desktop\temp>javac EjemploDeError.java EjemploDeError.java:1: 'class' or 'interface' expected clas EjemploDeError { ^ 1 error C:\WINDOWS\Desktop\temp>_

En general, los errores de compilación son aquellos que son causados por un problema en la sintaxis o que no dependen de los valores de variables, métodos e ingresos de datos que ocurran al momento de ejecutar.

Al ver este caso podemos decier inmediatamente que “clas” está mal escrito. De hecho el compilador nos lo dice:

EjemploDeError.java:1 Indica el archivo y el número de la línea del error. ‘class’ or ‘interface’ expected Éste es el error.

El que nos salió en este momento nos dice que “esperaba un class o interface”, lo que significa que esperaba la palabra “class” que es claramente el error en que incurrimos. Lo que está abajo de la primera línea de error es la línea y está marcado el inicio de la palabra que está mal escrita:

clas EjemploDeError { Esta es la línea errada. ^ Indica dónde está el error en la línea.

Capítulo I: Principios Básicos de Java

Si lo corregimos y lo volvemos a compilar, el error cambiará:

C:\WINDOWS\Desktop\temp>javac EjemploDeError.java EjemploDeError.java:4: ';' expected c.println ("Aqui le falta un punto y coma") ^ EjemploDeError.java:3: cannot resolve symbol symbol : class Console location: class EjemploDeError Console c = new Console(); ^ EjemploDeError.java:3: cannot resolve symbol symbol : class Console location: class EjemploDeError Console c = new Console(); ^ 3 errors C:\WINDOWS\Desktop\temp>_

Ahora tenemos 3 errores (como dice la última línea). 2 de ellos ocurren por causa de la Console (2º y 3º) y otro ocurre por falta del ;.

EjemploDeError.java:4: ';' expected c.println ("Aqui le falta un punto y coma") ^

El primer error nos dice que en la línea 4 esperaba que hubiera un “;” al final de la línea. Este era el problema que habíamos dejado para probar.

EjemploDeError.java:3: cannot resolve symbol symbol : class Console location: class EjemploDeError Console c = new Console(); ^ EjemploDeError.java:3: cannot resolve symbol symbol : class Console location: class EjemploDeError Console c = new Console(); ^

En los otros dos casos aparece la frase “cannot resolve symbol” y destacando la palabra “Console”. Esto ocurre porque no encuentra el archivo Console.class en el CLASSPATH, es decir, o no está definido el CLASSPATH como indicamos anteriormente o faltan las clases.

Corrijamos todos los errores y veamos como queda:

C:\WINDOWS\Desktop\temp>javac EjemploDeError.java C:\WINDOWS\Desktop\temp>_

Lo que significa que fue compilado satisfactoriamente.

Printed with FinePrint - purchase at www.fineprint.com

Capítulo I: Principios Básicos de Java

Principios Avanzados

Uso de PUBLIC/PROTECTED/PRIVATE:

Estas sentencias (que pueden estar en las firmas de los métodos o en las definiciones de las clases) nos indican el nivel de "PRIVACIDAD" que tiene la clase.

METODOS: La privacidad (a nivel de métodos) indica desde DONDE puedo llamar un método. Es decir:

§ PUBLIC: Lo puedo llamar desde cualquier parte (clases dentro del mismo directorio o de otro directorio). § PROTECTED: Solo las clases "hijas" pueden llamarlo (concepto de herencia más avanzado que veremos luego). § PRIVATE: Solo la misma clase que lo define puede llamarlo. § Sin nada: Para las clases del mismo directorio es pública, es decir la pueden llamar. Desde otro directorio no existe.

Estas palabras no son OBLIGATORIAS, ya que por definición si no ponemos nada, es accesible.

CLASES: A nivel de clases, la privacidad se refleja casi de la misma forma que los métodos. Es decir:

§ PUBLIC: Se puede utilizar esta clase desde cualquier lugar. OBLIGA a guardar la clase en un archivo con el MISMO NOMBRE (ojo con las mayúsculas y minúsculas):

public class Ejemplo { ... }

se debe guardar en Ejemplo.java y no en ejemplo.java.

§ Sin nada: Se puede utilizar en el mismo directorio. Aquí el nombre del archivo JAVA no importa, es decir:

class Ejemplo { ... }

se puede guardar en Ejemplo.java, ejemplo.java o miprograma.java

Capítulo I: Principios Básicos de Java

Uso de STATIC:

El uso de STATIC en los métodos solo nos explica cuando utilizamos un "OBJETO" o cuando utilizamos una "CLASE" para invocar el método.

OBJETO: Un objeto es una variable de un tipo Clase que es creada con un new:

Console c = new Console();

en este caso "c" es un objeto de tipo "Console". Todos los métodos de la clase Console están declarados sin la palabra STATIC, por ejemplo, la firma de "println" sería:

public void println(String s) { ... }

y es por esta razón que necesitamos al objeto "c" para invocarlo como:

c .println("Esto usa un objeto");

CLASE:

Las llamadas a métodos que se realizan a través del nombre de la clase REQUIEREN la palabra "static" en su definición. Por ejemplo, en la clase Math tenemos el método:

public static double random() { ... }

y como posee el "static", su invocación sería del tipo:

double x = Math .random();

Printed with FinePrint - purchase at www.fineprint.com

CAPÍTULO II: CONCEPTOS BÁSICOS

Capítulo II: Conceptos Básicos

Motivación

Escribir un programa que instruya al computador para que establezca el siguiente diálogo con una persona (usuario):

Por favor ingresa un N°: 123 Gano yo con el 124

Conceptos

Algoritmo

Se define como “ Algoritmo ” a la serie de pasos o “Etapas” (que debe realizar el computador) para resolver un problema

En el problema planteado arriba, un “algoritmo” para resolverlo se describe a continuación:

  1. Escribir (mostrar) en la pantalla la frase “ Por favor ingresa un N°:
  2. Leer (obtener, recuperar) el n° ingresado por la persona usando el teclado.
  3. Escribir en la pantalla:
    • “Gano yo con el “
    • el número (ingresado por la persona en el paso 2) sumándole uno.
  4. Terminar el programa

Computador

Usuario

COMPUTACION

  • Algoritmos y Estructuras de Datos
  • Lenguajes de Programación
  • Ingeniería de Software
  • Comunicación Humano-Computador
  • Computación Numérica y Simbólica
  • Bases de Datos
  • Inteligencia Artificial
  • Arquitectura de Computadores
  • Sistemas Operativos

Problemas Soluciones

Razonamientos:

  • algorítmico
  • lógico
  • capacidad para resolver problemas

Capítulo II: Conceptos Básicos

Programa

Traducción de un “ Algoritmo ” en un lenguaje de programación que el computador pueda interpretar para resolver el problema.

Para efectos de estudio en este curso, el lenguaje de programación utilizado para interpretar nuestros algoritmos es Java.

Traduzcamos el algoritmo que definimos para el problema inicial y veamos como queda en lenguaje Java:

C.print(“Por favor ingresa un N°:”); int n; n = C.readInt(); C.print(“Gano yo con el “); C.print(n+1);

Para comprender mejor el lenguaje, iremos línea a línea analizando qué significa y cómo se utilizó para traducir el algoritmo anterior.

C.print(“Por favor ingresa un N°:”);

  • Escribe en la pantalla la frase encerrada entre comillas ( “” ).
  • C es un objeto que representa la consola (pantalla y teclado) del computador.
  • print es un método (función) que se aplica al objeto C y que escribe su argumento en la pantalla. int n;
  • Declara n como una variable entera.
  • Variable
  • Representación simbólica de un valor (número).
  • Representa una ubicación (celda) en la memoria del computador.
  • Posee un nombre que la identifica (letra seguida de latras, dígitos o _).
  • Capacidad: un valor del tipo indicado.
  • int indica que el tipo de número que puede almacenar la variable es un entero (números sin punto decimal). n = C.readInt();
  • Lee un número entero desde el teclado y lo asigna (guarda) a (en) la variable n.
  • readInt() es un método (función sin argumentos) que:
  • Espera que el usuario ingrese un número (tecleando dígitos y ENTER).
  • Lee (obtiene, reconoce) el número.
  • Entrega (retorna) el número como resultado.
  • Para abreviar las dos líneas anteriores se puede utilizar int n = C.readInt(); C.print(“Gano yo con el “);
  • Escribe en la pantalla la frase “ Gano yo con el ”. C.print(n+1);
  • Escribe en la pantalla el valor de la variable n más uno.
  • n+1 Expresión aritmética ( n : variable, 1 : constante, + : operador).

Printed with FinePrint - purchase at www.fineprint.com

Capítulo II: Conceptos Básicos

Area = 3. Caso d real: Perímetro = 9. Area = 7.

Este fenómeno ocurre normalmente en Java, puesto que al operar un cuociente (caso que puede dar un resultado con decimales) con ambos valores enteros , el resultado SIEMPRE será entero.

Por ejemplo: 3 / 2 = 1 entero 3 / 2.0 = 1.5 real

Problemas Propuestos

  1. Programa para el siguiente diálogo

Calcular perímetro y area de rectángulo Largo? 2 Ancho? 3 Perímetro = ... Area = ...

  1. Diseñar el diálogo y escribir un programa que calcule la velocidad de un móvil en km/hora, dadas la distancia (en metros) y el tiempo (en segundos).
  2. Inventar un problema, diseñar el diálogo y escribir.

CAPÍTULO III: ENTRADA Y SALIDA

Capítulo III: Entrada y Salida

Motivación La I/O (Entrada/Salida) estándar es, por definición, cómo se comunica nativamente Java con el usuario.

Es así como clases hechas como Console evitan que uno conozca realmente donde está el ingreso de datos y el despliegue de ellos en la pantalla o interfaz (gráfica de texto) que Java provee. De hecho, Console es un Applet que utiliza un Canvas en donde se escriben las líneas de texto para la salida estándar y que permite el ingreso de datos a través del teclado, para luego pasárselo a los programas que la utilizan.

Sintaxis

Clase Console^4

Esta clase es simplemente un encapsulamiento de la Entrada y Salida estándar de Java. En este documento se utiliza la mayor parte de los capítulos por simplicidad, no obstante la utilización de System para entrada y salida estándar también se detalla en caso de desear utilizarla.

Le definición de Console permite realizar las siguientes funcionalidades:

Método Descripción public Console(); public Console(String); public Console(int,int, String);

Constructores de la clase Console por defecto, con título, y con tamaño y título respectivamente. public int maxcol(); public int maxrow();

Obtener el tamaño de columnas y filas que puede contener la consola abierta. public void clear(); Limpiar la consola. public void showCursor(); public void hideCursor();

Mostrar y ocultar el cursor.

public void print(String); public void println(String);

Imprimir en la consola.

public boolean readBoolean(); public byte readByte(); public short readShort(); public int readInt(); public long readLong(); public double readDouble(); public float readFloat();

Leer un valor desde el teclado utilizando la consola.

(^4) Ver http://www.holtsoft.com/java/hsa_package.html#Console para mayor información.

Printed with FinePrint - purchase at www.fineprint.com

Capítulo III: Entrada y Salida

public char readChar(); public String readString(); public String readLine(); public void setFont(Font); public void setTextBackgroundColor(Color); public void setTextColor(Color);

Dar tipografía (Font) y color al texto de la consola^5.

Y también existen formas de utilizarla como un lienzo gráfico para dibujar^6 :

Método Descripción public int maxx(); public int maxy();

Obtener tamaño del lienzo.

public void setColor(java.awt.Color); Dar color al pincel. public void clearRect(int, int, int, int); Limpiar un trozo del lienzo. public void copyArea(int, int, int, int, int, int); Copiar un trozo del lienzo. public void draw3DRect(int, int, int, int, boolean); public void drawArc(int, int, int, int, int, int); public void drawLine(int, int, int, int); public void drawMapleLeaf(int, int, int, int); public void drawOval(int, int, int, int); public void drawPolygon(int[], int[], int); public void drawRect(int, int, int, int); public void drawRoundRect(int, int, int, int, int, int); public void drawStar(int, int, int, int); public void drawString(String, int, int); public void fill3DRect(int, int, int, int, boolean); public void fillArc(int, int, int, int, int, int); public void fillMapleLeaf(int, int, int, int); public void fillOval(int, int, int, int); public void fillPolygon(int[], int[], int); public void fillRect(int, int, int, int); public void fillRoundRect(int, int, int, int, int, int); public void fillStar(int, int, int, int);

Dibujar todo tipo de figuras.

Clase System

En algún lado ya se ha utilizado la clase System , la cual se basa en una serie de funcionalidades estáticas (definidas como static ) que permiten interactuar nativamente entre el sistema y el usuario (o los periféricos que tenga). Por ejemplo:

System.out es un objeto que posee una referencia a la pantalla de salida estándar de Java.

(^5) Para ver cómo funcionan los colores, referirse a Canvas en página 53. (^6) Para ver cómo funcionan algunos de los métodos gráficos, ver sección Canvas en página 53.

Capítulo III: Entrada y Salida

Ahondando en este ejemplo, System.out posee las funcionalidades de imprimir en pantalla que han trascendido a objetos como la Console o PrintWriter :

  • System.out.println(...) : Imprime en pantalla lo que está entre paréntesis (literal o expresión) y salta una línea después de hacerlo.
  • System.out.print(...) : Imprime en pantalla lo que está entre paréntesis (literal o expresión) pero sin saltar la línea al final.

Por ejemplo, lo que con Console imitaba el siguiente diálogo:

Hola mucho gusto.

era:

Console c = new Console(); c.println(“Hola mucho gusto”);

con System.out es mucho más sencillo: al ser una variable estática de la clase System , no necesita de una referencia a dicha clase:

System.out .println(“Hola mucho gusto”);

Bastante sencillo. Veamos ahora como se leen datos con System.

El caso de entrada de datos es más complejo y es lo que lleva a los programadores a crear objetos como Console. Es decir, no es tan sencillo como poner:

System.in.readInt(); // ESTO ESTA MALO

Aunque les gustaría mucho. J

System.in es una referencia estándar a la entrada desde el teclado. Sin embargo su uso es un poco distinto, pero similar a lo que pasa con los archivos de lectura, ya que también son entradas, esto es:

BufferedReader in = new BufferedReader( new InputStreamReader( System.in ));

Esta línea reemplazaría a la declaración de la consola en el caso de utilizar Console. Es decir, lo que antes imitaba a:

Cómo te llamas? Juan Hola Juan, mucho gusto

y que con Console quedaba más o menos así:

Console c = new Console(); c.print(“Como te llamas?”);

Printed with FinePrint - purchase at www.fineprint.com

CAPÍTULO XVIII: TIPOS Y ESTRUCTURAS DE DATOS

<expresión> se escribe en una línea (hacia el lado) y no en varios niveles. La comprenden variables, constantes, operadores binarios (+, -, *, /), operadores unarios (+, -), métodos y expresiones entre paréntesis. Antes de ser asignada a una variable, esta expresión es EVALUADA y el valor obtenido reside en el espacio reservado de memoria para dicha variable.

Por ejemplo, podemos realizar las siguientes asignaciones

a = v1 + v2; a = (5 – a) * 3 / v1; a = 2;

Tipos de Datos

Son definiciones de espacios de memoria en los cuales se almacenan valores específicos.

Esta definición es bastante técnica, por lo que simplificaremos un poquito a la siguiente definición de tipo de dato:

Es una clase de números (o datos) con los cuales se pueden definir las variables que los almacenarán.

En Java existen los tipos de datos numéricos:

Tipo Nº Bits Mayor Valor Menor Valor Precisión (dígitos) Byte 8 127 -128 3 Short 16 32.767 -32.768 5 Int 32 2.147.483.647 -2.147.483.648 10 Long 64 263 – 1 -2^63 Float 32 3,4 x 10^38 -3,4 x 10^38 Double 64 1,7 x 10^301 -1,7 x 10^301

Para definir o declarar una variable con cierto tipo, se debe utilizar la siguiente sintaxis:

;

en donde

es un nombre cualesquiera que le permita identificar a ese espacio de memoria separado para el tipo de dato indicado.

Por ejemplo:

int i; i = 5;

Capítulo IV: Asignaciones, Expresiones y Tipos de Datos

Conversión de Datos

Para convertir tipos de datos se usa un CAST explícito o implícito que transforma, convierte y/o trunca desde un tipo de dato a otro.

Los cast implícitos se pueden hacer desde tipos de más pequeño tamaño (ver tabla) hacia tipos más grandes. Por ejemplo:

int a = 6; double b = a; // Cast implícito

Los cast explícitos se deben hacer desde tipos de más grande tamaño (ver tabla) hacia tipos más pqueños. Por ejemplo:

double a = 10.0; double b = (double) a; // Cast explícito

Solución Console c = new Console(); c.println(“Calcular porcentajes”); c.print(“Votos candidato 1”); int v1 = c.readInt(); c.print(“Votos candidato 2”); int v2 = c.readInt(); int total; total = v1 + v2; c.println(“Total de votos = “ + total); c.println(“Candidato 1 = “ + 100.0v1/total); c.println(“Candidato 2 = “ + 100.0v2/total)

Printed with FinePrint - purchase at www.fineprint.com

CAPÍTULO V: MÉTODOS Y FUNCIONES

Capítulo V: Métodos y Funciones

Motivación Existen muchas funciones matemáticas y no matemáticas en Java que se encuentran pre- definidas. Estas funciones están escritas para que los programadores las utilicen en sus códigos sin volver a escribir los subprogramas que realizan esas funcionalidades.

Concepto

Funciones/Métodos

Trozos de código que pueden ser reutilizados a través de una llamada a su definición con ciertos parámetros. También reciben el nombre de Métodos.

En Java por ejemplo existe una gran librería matemática que incluye métodos para la raíz cuadrada, potencias, exponenciales, logaritmos, senos, cosenos, tangentes, máximos, mínimos, redondeo de valores y números aleatorios.

Invocación o Llamada de un Método

La llamada es la forma en que el lenguaje invoca o permite la ejecución del trozo de código escrito dentro de un método. En general, requiere de un nombre (del método) y sus parámetros (si es que tiene).

Para que veamos como se invocan los métodos, veamos aquellos que se encuentran en la librería matemática:

Función Significado Tipo Argumento

Tipo Resultado

Ejemplo Resultado

sqrt(x) √ x, x ≥ 0 double double sqrt(4.0) 2. abs(x) |x| i, l, f, d del arg abs(-3) 3 pow(x,y) xy^ d d pow(2.0,3) 8. exp(x) ex^ d d exp(1) Math.E^8 log(x) logex d d log(Math.E) 1. sin(x) seno de < x (x en radianes)

d d sin(Math.PI/2) 1.

cos(x) coseno de < x d d cos(Math.PI) -1. tan(x) tangente de < x d d tan(Math.pi/4) 1. asin(x) arco-seno de x d d asin(1.0) Math.PI^9 / acos(x) arco-coseno de x d d acos(-1.0) Math.PI

(^8) Math.E está definida en la librería matemática. (^9) Math.PI está definida en la librería matemática.

Capítulo V: Métodos y Funciones

Función Significado Tipo Argumento

Tipo Resultado

Ejemplo Resultado

atan(x) arco-tangente de x d d atan(1.0) Math.PI / round(x) redondear x d, f l, i round(4.5) 5L floor(x) n / n ≤ x < n+1 d d floor(4.9) 4. ceil(x) n / n-1 < x ≤n d d ceil(4.1) 5. max(x,y) mayor entre x e y i,l,f,d de arg max(4.1, 6.5) 6. min(x,y) menor entre x e y i,l,f,d de arg min(4.1, 6.5) 4. random( ) Nº al azar en [0,1[ d random( ) 0.x...

Veamos unos ejemplos de utilización de funciones de la librería matemática:

// Cálculo de Area y Perímetro c.print(“Ingrese el radio de la circunferencia?”); double r = c.readDouble(); c.print(“El perímetro de la circunferencia es: ”); c.println(2 * Math.PI * r); c.print(“El area de la circunferencia es: “); c.println(Math.PI * Math.pow(r, 2));

En este ejemplo podemos ver como utilizamos un método de la clase matemática dentro de una expresión.

// Cálculo de un radio a partir del área c.print(“Ingrese ahora un Area de circunferencia?”); double a = c.readDouble(); c.print(“El radio de la circunferencia es: “); c.println(Math.sqrt(a / Math.PI));

En este ejemplo podemos ver como se puede utilizar una expresión como argumento de un método de la clase matemática.

// Cálculo de la tangente a partir de otras funciones c.print(“Ingrese un ángulo en radianes? “); double ang = c.readDouble(); c.print(“La tangente original es: “); c.println(Math.tan(ang)); c.print(“La tangente calculada es: “); c.println(Math.sin(ang)/Math.cos(ang));

En este ejemplo podemos ver que se pueden componer en una misma expresión distinto métodos matemáticos sin necesidad de utilizar variables adicionales.

Printed with FinePrint - purchase at www.fineprint.com

CAPÍTULO VI: CONDICIONALES

Capítulo VI: Condicionales

Motivación Escribir subprogramas que realicen los operaciones de adición y cuociente de número reales, considerando que no se puede dividir por 0.

Algoritmo

Veamos primero el algoritmo para la adición a modo de práctica:

  1. Recibir los valores de los sumandos dentro del subprograma (llamada del método).
  2. Guardar temporalmente el valor de la suma de los valores obtenidos en la llamada.
  3. Retornar el resultado guardado en el paso 2.

Para este algoritmo no hay problema de escribir la solución:

static double suma (double a, double b) { double r = a + b; return r; }

Una versión alternativa y avanzada sería:

static double suma (double a, double b) { return a + b; }

Ok. Veamos el algoritmo para la división:

  1. Recibir los valores de los operandos del cuociente. 2. Verificar si el dividendo es igual a 0 a. Retornar 0 (indicando que era 0 para que no haya error)
  2. Guardar temporalmente el valor de la división de los valores obtenidos en la llamada.
  3. Retornar el resultado guardado en el paso 3.

Como podemos ver, necesitamos algo que nos permita ejecutar (a) solo si el dividendo es 0.

Concepto

Condicionales

Un condicional es una instrucción que permite ejecutar un trozo de código si y solo si cumple con una condición o valor de verdad.

Capítulo VI: Condicionales

El concepto de condicional es bastante básico. Las condiciones son expresiones que retornan valores de verdad (verdadero o falso) y que condicionan la ejecución de instrucciones indicadas en el condicional.

Algo como:

Si la condición es cierta Ejecuta las instrucciones cuando es cierta Si no es cierta Ejecuta estas otras instrucciones.

Sintaxis

Los condicionales utilizan un comando especial llamado if ... else. Su forma general es como sigue:

if (<condición>) { } else { }

La primera parte del condicional corresponde a la condición, la segunda parte (o else ) corresponde a decir “si la condición NO se cumple” o el famoso “si no” o “de lo contrario”. Esta segunda parte es opcional.

Antes de continuar, debemos insertar dos nuevos concepto:

Valor de Verdad

Todos saben cuál es la definición e este concepto. Así que abordaremos un nuevo tipo de dato que soporta almacenar esto: bolean.

El bolean es un tipo de dato especial que solo puede almacenar VERDADERO o FALSO. Por ejemplo:

boolean var1 = true; boolean var2 = false;

Es sumamente sencillo. La gracia es que se puede usar como condición sola en un if. Por ejemplo:

if (var1) ... else ...

Printed with FinePrint - purchase at www.fineprint.com

Capítulo VI: Condicionales

Operadores Lógicos

Un operador lógico es un comparador que permite operar valores, variable o expresiones y retornar un valor de verdad (verdadero o falso).

Existe muchos operadores lógicos que describiremos a continuación:

Comparador de Valores Numéricos: Permite comparar valores numéricos indicando si es mayor, menor, mayor o igual, menor o igual, distinto o simplemente igual.

A > 5 OPERADOR MAYOR QUE A < 3 OPERADOR MENOR QUE A >= 1 OPERADOR MAYOR O IGUAL QUE A <= 0 OPERADOR MENOR O IGUAL QUE A == 4 OPERADOR IGUAL QUE A != 4 OPERADOR DISTINTO QUE

Operador de Negación: Este operador permite NEGAR un valor de verdad, es decir cambiar el valor de VERDADERO a FALSO o de FALSO a VERDADERO.

! (A == 5) SE TRADUCE POR A != 5

Conjunciones: Son operadores especiales que permiten unir distintos valores de verdad. Hablando un poco en español sería como el Y y el O (bueno, son eso).

A > 5 && A < 10 A mayor que 5 y menor que 10 A < 9 || A > 10 A menor que 9 o mayor que 10

Un ejemplo que utiliza todo lo anterior sería condicionar si es par o impar un número:

c.print(“Número?”); int n = readInt(); if ( n % 2 == 0 ) { c.println(n + “Es par”); } else { c.println(n + “Es impar”); }

Esto es muy fácil de visualizar. Veamos un ejemplo más complejo considerando 3 casos distintos:

c.print(“Número?”); int n = readInt(); if ( n > 0 ) { c.println(n + “ es mayor que 0”); } else if ( n < 0 ) { c.println(n + “ es menor que 0”); } else { c.println(n + “ es igual que 0”); }

Capítulo VI: Condicionales

En este ejemplo podemos ver 3 casos y como se pueden mezclar los distintos if ... else.

Por último un ejemplo sencillo de que hacer solo si se cumple la condición:

c.print(“Número?”); int n = readInt(); if ( n == 123 ) { c.println( “BINGO”); }

En este último ejemplo podemos ver que el ELSE era completamente opcional.

Solución La solución con este concepto se pone muuuuy sencilla y queda como:

static double division (double a, double b) { if (b == 0) { return 0; } double r = a / b; return r; }

También, podemos utilizar una solución alternativa como:

static double division (double a, double b) { double r; if (b == 0) { r = 0; } else { r = a / b; } return r; }

O una muy similar, pero algo mas inteligente:

static double division (double a, double b) { double r = 0; if (b != 0) { r = a / b; } return r; }

Caso Especial Hay un problema muy claro, cuando se utilizan muchos IF para distinguir distintos trozos con comparadores de igualdad. Por ejemplo:

Printed with FinePrint - purchase at www.fineprint.com