lunes, 30 de noviembre de 2009

Ch03-13: La Clase Factura

3.13 Cree una clase llamada Factura, que una ferretería podría utilizar para representar una factura para un artículo vendido en la tienda.

Una Factura debe incluir cuatro piezas de información como variables de instancia: un número de pieza (tipo String), la descripción de pieza (tipo String), la cantidad de artículos de ese tipo que se van a comprar (tipo int) y el precio por artículo (double).

Su clase debe tener un constructor que inicialice las cuatro variables de instancia. Proporcione un método establecer y un método obtener para cada variable de instancia.

Además, proporcione un método llamada obtenerMontoFactura, que calcule el monto de la facture (es decir, que multiplique la cantidad por el precio por artículo). y después devuelva ese monto como un valor double. Si la cantidad no es positiva, debe establecer en 0 (cero).

Si el precio por artículo no es positivo, debe establecer a 0.0.

Escriba una aplicación de prueba llamada PruebaFactura, que demuestra las capacidades de la clase Factura.

Solución:

Archivo Java Factura.java [enlace alternativo]:


Clase que prueba las capacidades de la clase Factura:

Archivo Java PruebaFactura.java [enlace alternativo]:


Conclusiones:


Nuevamente podemos observar que los métodos establecer y obtener, incrementan la robustez del programa.

Por lo general, se suelen usar variables de instancia, por ejemplo qtyArtciculo, que llevan antepuesto un prefijo en inglés, en este caso 'qty' para hacer referenciar a 'quantity' que es lo mismo que 'cantidad' en español.

Ch03-11: Clase Cuenta

3.12 Modifique la clase Cuenta para proporcionar un método llamada cargar, que retire dinero de un objeto Cuenta.

Asegure que el monto a cargar no exceda el saldo de Cuenta. Si lo hace, el saldo debe permanecer sin cambio y el método debe imprimir un mensaje que indique "El monto a cargar excede el saldo de la cuenta".

Modifique la clase PruebaCuenta para probar el método cargar.

Solución:

Archivo Java Cuenta.java [enlace alternativo]:

La clase de prueba:

Archivo Java PruebaCuenta.java [enlace alternativo]:

Conclusiones:


Los métodos establecer ayudan a que los datos que ingresa el usuario a través de uno de los medios de flujo de entrada se validen antes de almacenarse en una o más variables de instancia. Esto promueve que los datos mantengan consistencia durante el tiempo de ejecución del programa.

El programador siempre debe considerar estas excepciones que pueden ocurrir durante la ejecución del programa. Más adelante se presentarán problemas resueltos acerca de las Excepciones en Java.

Ch03-11: Libro Calificaciones

3.11 Modifique la clase LibroCalificaciones de la siguiente manera:
  • Incluya una segunda variable de instancia String, que represente el nombre del instructor del curso.
  • Proporcione un método establecer para modificar el nombre del instructor, y un método obtener para obtener el nombre del instructor.
  • Modifique el constructor para especificar dos parámetros: uno para el nombre del curso y otro para el nombre del instructor.
  • Modifique el método mostrarMensaje, de tal forma que primero imprima el mensaje de bienvenida y el nombre del curso, y que después imprima "Este curso es presentado por: ", seguido del nombre del instructor.
Use su clase modificada en una aplicación de prueba que demuestra las nueva capacidades de la clase.

Solución:

Archivo Java LibroCalificaciones.java [enlace alternativo]:


La clase de prueba:

Archivo Java PruebaLibroCalificaciones.java [enlace alternativo]:



Conclusiones:

Los método establecer (también conocidos como métodos mutadores) y los métodos obtener (o métodos de consulta) permiten establecer o modificar el valor de una o más variables de instancias de una clase. Por otro lado, los métodos obtener obtienen información acerca del contenido de una variable de instancia.

jueves, 19 de noviembre de 2009

Comentario

Quiero hacer la siguiente entrada con la idea de invitar a aquellas personas que visitan este blog, a que comenten acerca de los códigos que se publican. Básicamente, como ya lo había mencionado, el propósito es crear un ambiente de participación (proponer mejores soluciones a las hechas por mí mismo, tratar de simplificar (optimizar) el código fuente expuesto de los problemas resueltos, etc.).

Además, quiero aprovechar esta entrada para aclarar que el contenido publicado está bajo los principios de Creative Commons. Y sigue los siguientes tipos de licencia:
  • Reconocimiento - No Comercial
Creative Commons - No Comercial - Reconomiento
Para terminar con esta entrada, para el próximo mes (diciembre), me encargaré de publicar con mayor frecuencia contenido para este blog: desde material bibliográfico, noticias acerca de la evolución de la plataforma Java.

Ch02-31: Cuadrados y Cubos

2.26 "Utilizando sólo las técnicas de programación que aprendió en este capítulo, escriba una aplicación que calcule los cuadrados y cubos de los números del 0 al 10, y que imprima los valores resultantes en formato de tabla, como se muestra a continuación. [Nota: Este programa no requiere de ningún tipo de entrada por parte del usuario]."



Solución:

Código Java CuadradoCubo.java [enlace alternativo]:

Conclusiones:


El uso de los especificadores de formato proporcionan un medio idóneo para mostrar información tabulada.

Los paréntesis redundantes, es decir, signos de agrupación que ayudan a identificar de forma fácil y directa el resultado que se pretende obtener a través de la expresión.

jueves, 12 de noviembre de 2009

Ch02-30: Separar dígitos

2.29 Escriba una aplicación que reciba del usuario un número compuesto por cinco dígitos, que separe ese número en sus dígitos individuales y los imprima, cada uno separado de los demás por tres espacios.

Por ejemplo, si el usuario escribe el número 42339, el programa debe imprimir:
4 2 3 3 9
Suponga que el usuario escribe el número correcto de dígitos. ¿Qué ocurre cuando ejecuta el programa y escribe un número con más de cinco dígitos? ¿Qué ocurre cuando ejecuta el programa y escribe un número con menos de cinco dígitos? [Sugerencia: es posible hacer este ejercicio con las técnicas que aprendió en este capítulo. Necesita utilizar los operadores de división y residuo para "seleccionar" cada dígito].

Solución:

Archivo Java SepararDigitos.java [enlace alternativo]:

Conclusiones:


El uso de los operadores aritméticos cociente (/) y residuo (%) permiten desarrollar de manera directa y simple el problema propuesto. La clave de la solución se encuentre en la instrucción if anidado.

Ch02-29: Conversión (casting) de tipos

2.28 "En este capítulo (2), aprendió acerca de los enteros y el tipo int. Java puede también representar letras en mayúsculas y una considerable variedad de símbolos especiales. Cada carácter tiene su correspondiente representación entera. El conjunto de caracteres que utiliza una computadora, y las correspondientes representaciones enteras de estos caracteres, se conocen como el conjunto de caracteres de esa computadora.

Usted puede indicar un valor de carácter en un programa con sólo encerrar ese carácter entre comillas sencillas (o simples), como en 'A'.

Usted puede determinar el equivalente entero de un carácter si antepone a ese carácter la palabra (int), como en
( int ) 'A'
Esta forma se conoce como operador de conversión de tipo. [...]. La siguiente instrucción imprime un carácter y su equivalente entero:
System.out.printf( "El carácter %c tiene el valor %d\n" , 'A' , ( ( int ) ) 'A' ) );
Cuando se ejecuta esta instrucción, muestra el carácter A y el valor 65 (del conjunto de caracteres conocido como Unicode) como parte de la cadena. Observe que el especificador de formato %c es un receptáculo para un carácter (en este caso, el carácter 'A').

Utilizando instrucciones similares a la mostrada anteriormente en este ejercicio, escriba una aplicación que muestre los equivalentes enteros de algunas letras en mayúsculas, en minúsculas, dígitos y símbolos especiales.

Muestre los equivalentes enteros de los siguientes caracteres: A B C a b c 0 1 2 $ * + / y el carácter en blanco.

Solución:

Archivo Java ConversionTipos.java [enlace alternativo]:


Conclusiones:


Este tipo de problema juega un papel importante en el desarrollo de problemas posteriores, pues para determinados casos, es idóneo representar los datos en un formato más adecuado para la solución que se busca.

El especificador de formato %c funciona como un receptáculo de caracteres encerrados entre comillas simples.

martes, 10 de noviembre de 2009

Ch02-28: Circulo

2.27 "En este capítulo (2), aprendió sobre los enteros y el tipo int. Java también puede representar números de punto flotante que contienen puntos decimales, como 3.14159. Escriba una aplicación que reciba del usuario el radio de un círculo como un entero, y que imprima el diámetro, la circunferencia y el área del círculo mediante el uso del valor de punto flotante 3.14159 para π.

Use las técnicas aprendidas en este capítulo. [Nota: también puede utilizar la constante predefinida Math.PI para el valor de π. Esta constante es más precisa que el valor 3.14159. La clase Math se define en el paquete java.lang. Las clases en este paquete se importan de manera automática, por lo que no se necesita importar la clase Math mediante la instrucción import para usarla].

Use las siguientes fórmulas (r es el radio):
diámetro = 2r
circunferencia = 2πr
área = πr^2
No almacene los resultados de cálculo en una variable. En vez de ello, especifique cada cálculo como el valor que se imprimirá en una instrucción System.out.print. Observe que que los valores producidos por los cálculos del área y la circunferencia son números de punto flotante. Dichos valores pueden imprimirse con el especificador de formato %f en una instrucción System.out.printf."

Solución:

Archivo Java Circulo.java [enlace alternativo]:


Conclusiones:


El uso del método println del objeto out de la clase System juego el papel principal en la solución de este problema.

El especificador de formato %f facilita la presentación de números de punto flotante a través del método printf.

Ch02-27 Tablero damas

2.26 Escriba una aplicación que muestre un patrón de tablero de damas, como se muestra a continuación.



Solución:

Archivo Java TableroDamas.java [enlace alternativo]:
Conclusiones:


El uso del método println del objeto out (clase System) juega el papel principal en la solución de este problema.

Se ha tenido en cuenta el espaciado de inicio de línea para lograr el patrón que se muestra en la imagen superior de esta entrada.

Ch02-26 Múltiplos

2.26 Escriba una aplicación que lea dos enteros, determine si el primero es un múltiplo del segundo e imprima el resultado. [Sugerencia: use el operador residuo].

Solución:

Archivo Java Multiplo.java [enlace alternativo]:

Conclusiones:


Como se puede observar en el código fuente de la solución al problema planteado se destaca el uso del operador residuo (%) para determinar si un número es múltiplo de otro. El método exit (línea 29) recibe como parámetro un entero (en caso de ser un número distinto de cero (0), quiere decir que el programa ha termina de forma anormal).

viernes, 6 de noviembre de 2009

Ch02-25 Par o impar

2.25 Escriba una aplicación que lea un entero y que determine e imprima si es impar o par. [Sugerencia: use el operador residuo. Un número par es un múltiplo de 2. Cualquier múltiplo de 2 deja un residuo de 0 (cero) cuando se divide entre 2.

Solución:

Archivo Java ParOImpar.java [enlace alternativo]:

Conclusiones:

En la solución de este problema se destaca el uso del operador % (residuo, resto, módulo o modulus) para determinar si el número que introdujo el usuario es par o impar.

Ch02-24 Mayor y menor 5 enteros

2.24 Escriba una aplicación que lea cinco enteros y que determine e imprima los enteros mayor y menor en el grupo. Use solamente las técnicas de programación que aprendió en este capítulo.

Solución:

Archivo Java Comparar5Enteros.java [enlace alternativo]:



Conclusiones:

Como puede observarse la solución a este problema es muy sencilla. Para agilizar la entrada de datos se usó un objeto de la clase Scanner (entrada).

Por otro lado, aquí se demuestra cómo formatear la salida a través del método static printf.

jueves, 5 de noviembre de 2009

Ch02-18 Figuras planas

2.18 Escriba una aplicación que muestre un cuadro, un óvalo, una flecha y un diamante usando asteriscos (*). Como se muestra a continuación:



Solución:
Archivo Java Figuras.java [enlace alternativo]:

Conclusiones:

La salida estándar permite la salida de figuras planas formadas por caracteres del conjunto UNICODE.

El uso de caracteres especiales como: \t y \n (tabulación y nueva línea, respectivamente) facilitan la solución de este problema.