Guía Semana2 Desarrollo Aplicaciones Móviles I
Guía Semana2 Desarrollo Aplicaciones Móviles I
Guía Semana2 Desarrollo Aplicaciones Móviles I
Semana 2
OBJETO DE LA EXPERIENCIA
Reconoce conceptos básicos del Lenguaje de Programación Java a través de casos prácticos
MARCO TEÓRICO
¿Qué es Java?
Java es uno de los lenguajes de programación más populares del mundo. Es un lenguaje orientado a objetos, potente, versátil y
mutiplataforma (corre en cualquier sistema operativo moderno). Además puedes obtener Java y gran cantidad de herramientas para trabajar
con él de forma gratuita, siendo la mayor parte de su código libre y abierto.
¿Qué necesito conocer de Java para aprender a crear Apps para Android?
Con la tecnología Java puedes desarrollar sencillas aplicaciones para PC, applets para ejecutar en un navegador o potentes aplicaciones web,
con acceso a bases de datos y grandes prestaciones, orientadas al mundo empresarial. Pero no necesitas dominar todas las tecnologías Java si
quieres aprender a crear Apps para Android
MATERIALES
a) EQUIPOS
b) HERRAMIENTAS
c) CONSUMIBLES
PROCEDIMIENTO
Del mismo modo que en la vida diaria, en un programa es necesario tomar decisiones basadas en ciertos hechos y actuar en
consecuencia. El lenguaje Java tiene una sentencia básica denominada if (si condicional) que realiza un test y permite responder de
acuerdo al resultado.
La sentencia if
La sentencia if, actúa como cabría esperar. Si la condición es verdadera, la sentencia se ejecuta, de otro modo, se salta dicha
sentencia, continuando la ejecución del programa con otras sentencias a continuación de ésta. La forma general de la sentencia if
es:
if (condición){
sentencia;
}
Si el resultado del test es verdadero (true) se ejecuta la sentencia que sigue a continuación de if, en caso contrario, falso (false), se
salta dicha sentencia, tal como se indica en la figura. La sentencia puede consistir a su vez, en un conjunto de sentencias agrupadas
en un bloque.
if (condición){
sentencia1;
sentencia2;
}
En el siguiente ejemplo, si el número del boleto que hemos adquirido coincide con el número aparecido en el sorteo, nos dicen que
hemos obtenido un premio.
if (condición)
sentencia1;
else
sentencia2;
Las dos primeras líneas indican que si la condición es verdadera se ejecuta la sentencia
1. La palabra clave else, significa que si la condición no es verdadera se ejecuta la sentencia 2, tal como se ve en la figura..
Dado que las sentencias pueden ser simples o compuestas la forma general de if...else es
if (condición){
sentencia1;
sentencia2;
}else{
sentencia3
sentencia4;
sentencia5
}
Existe una forma abreviada de escribir una sentencia condicional if...else como la siguiente:
if (numeroBoleto==numeroSoreteo)
premio=1000;
else
premio=0;
int signo=(exponente%2==0)?1:-1;
La condición entre paréntesis es la siguiente: un número es par, cuando el resto de la división entera de dicho número entre dos vale
cero.
La sentencia switch
Como podemos ver en la figura del apartado anterior, la sentencia if...else tiene dos ramas, el programa va por una u otra rama
dependiendo del valor verdadero o falso de la expresión evaluada. A veces, es necesario, elegir entre varias alternativas, como se
muestra en la siguiente figura
El código resultante puede ser difícil de seguir y confuso incluso para el programador avanzado. El lenguaje Java proporciona una
solución elegante a este problema mediante la sentencia condicional switch para agrupar a un conjunto de sentencias if...else.
switch(expresion){
case valor1:
sentencia1;
break; //sale de switch case
valor2:
sentencia2;
break; //sale switch case
valor3:
sentencia3;
break; //sale de switch default:
sentencia4;
}
En la sentencia switch, se compara el valor de una variable o el resultado de evaluar una expresión, con un conjunto de números
enteros valor1, valor2, valor3, .. o con un conjunto de caracteres, cuando coinciden se ejecuta el bloque de sentencias que están
asociadas con dicho número o carácter constante. Dicho bloque de sentencias no está entre llaves sino que empieza en la palabra
reservada case y termina en su asociado break. Si el compilador no encuentra coincidencia, se ejecuta la sentencia default, si es que
está presente en el código.
Veamos ahora un ejemplo sencillo: dado el número que identifica al mes (del 1 al 12) imprimir el nombre del mes.
Ahora un ejemplo más complicado, escribir un programa que calcule el número de días de un mes determinado cuando se da el año.
Anotar primero, los meses que tienen 31 días y los que tienen 30 días. El mes de Febrero (2º mes) es el más complicado ya que tiene
28 días excepto en los años que son bisiestos que tiene 29. Son bisiestos los años múltiplos de cuatro, que no sean múltiplos de 100,
pero si son bisiestos los múltiplos de 400.
La sentencia for
Esta sentencia se encuentra en la mayoría de los lenguajes de programación. El bucle for se empleará cuando conocemos el número
de veces que se ejecutará una sentencia o un bloque de sentencias, tal como se indica en la figura. La forma general que adopta la
sentencia for es
for(inicialización; condición; incremento) sentencia;
El primer término inicialización, se usa para inicializar una variable índice, que controla el número de veces que se ejecutará el
bucle. La condición representa la condición que ha de ser satisfecha para que el bucle continúe su ejecución.
Ejemplo: Escribir un programa que imprima los primeros 10 primeros números enteros empezando por el cero
for (int i = 0; i < 10; i++)
{ System.out.println(i);
}
El resultado será: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
La variable índice i se declara y se inicializa en el término inicialización, la condición se expresa de modo que i se debe mantener
estrictamente menor que 10; la variable i se incrementa una unidad en cada repetición del bucle. La variable i es local al bucle, por
lo que deja de existir una vez que se sale del bucle.
Ejemplo: Escribir un programa que imprima los números pares positivos menores o iguales que 20
for (int i=2; i <=20; i += 2)
{ System.out.println(i);
}
Ejemplo: Escribir un programa que imprima los números pares positivos menores o iguales que 20 en orden decreciente
for (int i=20; i >= 2; i -= 2)
{ System.out.println(i);
}
Ejemplo: Escribir un programa que calcule el factorial de un número empleando la sentencia iterativa for. Guardar el resultado
en un número entero de tipo long . Definición: el factorial de un número n es el resultado del producto 1*2*3*……… *(n-
1)*n.
public class FactorialApp {
public static void main(String[] args) { int numero=4;
long resultado=1;
for(int i=1; i<=numero; i++){ resultado*=i;
}
System.out.println("El factorial es "+resultado);
}
}
La sentencia while
A la palabra reservada while le sigue una condición encerrada entre paréntesis. El bloque de sentencias que le siguen se ejecuta
siempre que la condición sea verdadera tal como se ve en la figura. La forma general que adopta la sentencia while es:
while (condición)
sentencia;
Ejemplo: Escribir un programa que imprima los primeros 10 primeros números enteros empezando por el cero, empleando la
sentencia iterativa while.
int i=0;
while (i<10) {
System.out.println(i); i++;
}
El valor inicial de i es cero, se comprueba la condición (i<10), la cual resulta verdadera. Dentro del bucle, se imprime i, y se
incrementa la variable contador i, en una unidad. Cuando i vale 10, la condición (i<10) resulta falsa y el bucle ya no se ejecuta. Si el
valor inicial de i fuese 10, no se ejecutaría el bucle. Por tanto, el bucle while no se ejecuta si la condición es falsa.
Ejemplo: escribir un programa que calcule el factorial de un número empleando la sentencia iterativa while
La sentencia do...while
Como hemos podido apreciar las sentencias for y while la condición está al principio del bucle, sin embargo, do...while la condición
está al final del bucle, por lo que el bucle se ejecuta por lo menos una vez tal como se ve en la figura. do marca el comienzo del bucle
y while el final del mismo. La forma general es:
do{
sentencia;
}while(condición);
Ejemplo: Escribir un programa que imprima los primeros 10 primeros números enteros empezando por el cero, empleando la
sentencia iterativa do..while.
int i=0;
do{
System.out.println(i); i++;
}while(i < 10);
El bucle do...while, se usa menos que el bucle while, ya que habitualmente evaluamos la expresión que controla el bucle al
comienzo, no al final.
La sentencia break
A veces es necesario interrumpir la ejecución de un bucle for, while, o do...while. for(int i = 0; i < 10; i++){
if (i == 8) break;
System.out.println(i);
}
Consideremos de nuevo el ejemplo del bucle for, que imprime los 10 primeros números enteros, se interrumpe la ejecución del bucle
cuando se cumple la condición de que la variable contador i valga 8. El código se leerá: "salir del bucle cuando la variable contador i,
sea igual a 8".
Como podemos apreciar, la ejecución del bucle finaliza prematuramente. Quizás el lector pueda pensar que esto no es de gran
utilidad pues, el código anterior es equivalente a
Sin embargo, podemos salir fuera del bucle prematuramente si se cumple alguna condición de finalización.
while(true){
if (condicionFinal) break;
//...otras sentencias
}
Como podemos apreciar en esta porción de código, la expresión en el bucle while es siempre verdadera, por tanto, tiene que haber
algún mecanismo que nos permita salir del bucle. Si la condicion de finalización es verdadera, es decir la variable condicionFinal
del tipo boolean toma el valor true, se sale del bucle, en caso contrario se continua el procesamiento de los datos.
La sentencia continue
La sentencia continue, fuerza al bucle a comenzar la siguiente iteración desde el principio. En la siguiente porción de código, se
imprimen todos los números del 0 al 9 excepto el número 8.
for(int i = 0; i < 10; i++){
if (i == 8) continue;
System.out.println(i);
}
Etiquetas
Tanto break como continue pueden tener una etiqueta opcional que indica a Java hacia donde dirigirse cuando se cumple una
determinada condición.
salida:
for(int i=0; i<20; i++){
while(j<70){
if(i*j==500) break salida;
//...
}
//...
}
La etiqueta en este ejemplo se denomina salida, y se añade antes de la parte inicial del ciclo. La etiqueta debe terminar con el
carácter dos puntos :. Si no disponemos de etiqueta, al cumplirse la condición i*j==500, se saldría del bucle interno while, pero el
proceso de cálculo continuaría en el bucle externo for.
Escribir un programa que calcule los números primos comprendidos entre 3 y 100.
Los números primos tienen la siguiente característica: un número primo es solamente divisible por sí mismo y por la unidad, por
tanto, un número primo no puede ser par excepto el 2. Para saber si un número impar es primo, dividimos dicho número por todos
los números impares comprendidos entre 3 y la mitad de dicho número. Por ejemplo, para saber si 13 es un número primo basta
dividirlo por 3, y 5. Para saber si 25 es número primo se divide entre 3, 5, 7, 9, y 11. Si el resto de la división (operación módulo %)
es cero, el número no es primo.
En primer lugar, hacemos un bucle for para examinar los números impares comprendidos entre 3 y 100.
Hacemos la suposición de que numero es primo, es decir, de que la variable de control bPrimo toma el valor true. Para confirmarlo,
se halla el resto de la división entera entre numero, y los números i impares comprendidos entre 3 y numero/2. (Se recordará que
todo número es divisible por la unidad). Si el número numero es divisible por algún número i (el resto de la división entera numero
%i es cero), entonces el número numero no es primo, se abandona el bucle (break) con la variable de control bPrimo tomando el
valor false. En el caso de que numero sea un número primo, se completa el bucle interno, tomando la variable de control bPrimo el
valor inicial true.
Por último, si el número es primo, bPrimo es true, se imprime en la ventana, uno a continuación del otro separados por un
guión.
En este programa podemos observar la diferencia entre print y println. El sufijo ln en la segunda función indica que se imprime el
argumento y a continuación se pasa a la línea siguiente.
Salida:
En Java el objeto System.out está asociado con el flujo de salida que dirige los datos a la consola o pantalla, y tiene los siguientes
métodos:
Con estos métodos se puede escribir cualquier cadena o dato de los tipos básicos.
System.out.println(“El valor es” + “una virtud”);
Con el operador + se concatenan las dos cadenas y la cadena resultante se envía al buffer de la pantalla para se visualizada cuando el
programa termine. También podemos enviar constantes o variables de los tipos básicos, el método se encarga de convertir a cadena
esos datos, por ejemplo:
int p = 60;
System.out.print(“Valor de i es: “ + i);
Entrada:
En Java el objeto System.in esta asociado al flujo estándar de entrada (teclado) el elemento básico de este flujo son caracteres y no
cadenas como ocurre con out. El método read( ) retorna el carácter actual en el buffer de entrada:
char c;
c = (char) System.in.read( );
Esto resulta impráctico cuando es una línea de caracteres lo que queremos leer desde teclado, para ello se utiliza la clase
InputStreamReader, de la que se crea un objeto inicializado con System.in:
Una vez creado el en este se utiliza a su vez como argumento para inicializar otro objeto de la clase BufferedReader, el cual permite
la entrada de líneas de caracteres desde el teclado con el método readLine( ):
el método readLine( ) retorna un objeto cadena con la linea de caracteres leida desde el teclado; la referencia a ese objeto se asigna a
cd, que es una variable de tipo String. readLine( ) lanza la excepción IOException. Para evitar error en tiempo de compilación, en
main( ) se añade throws IOException
Se simplifican en una sola sentencia, no teniendo que crear el objeto en, es la forma usual en que aparece en los programas.
BufferedReader entrada = new BufferedReader(new InputStreamReader(System.in));
a) Para capturar una cadena de caracteres se haría el siguiente programa: Class ImpNombre {
Public static void main( String[ ] arg ) throws IOException {
BufferedReader entrada = new BufferedReader(new InputStreamReader(System.in)); String nombre;
System.out.print(“Introdusca su nombre por el teclado: “);
System.out.flush( );
nombre = entrada.readLine( );
System.out.println(“Hola: “ + nombre);
}
}
Class SumaEnteros {
Public static void main( String[ ] arg ) throws IOException {
BufferedReader entrada = new BufferedReader(new InputStreamReader(System.in)); int dato1, dato2,suma;
Class AreaTriangulo {
Public static void main( String[ ] arg ) throws IOException {
BufferedReader entrada = new BufferedReader(new InputStreamReader(System.in)); Float dato;
float base, altura;
}
}
d) Para capturar valores double se haría el siguiente programa: Class AreaTriangulo {
Public static void main( String[ ] arg ) throws IOException {
BufferedReader entrada = new BufferedReader(new InputStreamReader(System.in)); Double dato;
double base, altura;
Nota:
double d;
float f;
otra forma de realizar la captura de información de manera eficiente seria usando lo siguiente:
Estas dos formas simplifican la forma en que se efectuaron las entradas en los ejemplos anteriores
En la librería java.util disponemos de otra forma de realizar la entrada de datos, la clase Sccaner proporciona métodos para leer
datos de la entrada estándar (teclado), referenciada por el método System.in, estos métodos son:
Scanner(System.in): construye un lector para obtener valore por la entrada estándar ejemplo:
nextLine( ): retorna una cadena, pero a diferencia del anterior, lee del teclado los caracteres introducidos, inclusive los espacios en
blanco, hasta encontrar el Enter. Ejemplo:
Si el tipo de dato introducido no es del tipo solicitado no se acepta la entrada y se lanza una excepción, por ejemplo:
Leer.nextBolean ( );
Mediante el método printf de la clase java.util podemos especificar cómo va a ser la salida de la siguiente manera:
En donde en el formato se especifica cómo será la salida, es una cadena de caracteres formada por caracteres ordinarios,
especificaciones de formato y secuencias de escape, el formato se lee de izquierda a derecha.
Lista de variables: representa datos a escribir, cada variable debe tener su correspondiente especificación de formato y en el mismo
orden.
Métodos (Funciones):
Bloque de código que tiene un nombre, un tipo y una lista de argumentos o parámetros, esto es lo que en otros lenguajes de
programación recibe el nombre de función.
Sintaxis:
return valor;
return; (si no retorna ningún valor)
donde valor es una expresión con el valor que se devuelve, los métodos en Java siempre se deben declarar dentro de una clase.
Cuando un programa llama a un método, el control del programa se transfiere al método llamado. Un método llamado devuelve el
control al llamador cuando ejecuta la sentencia return o cuando se alcanza la llave derecha (}) al final del método.
El siguiente ejemplo crea un programa en el cual se define un método llamado máximo que será llamado desde la función main( ),
este método determinara el mayor de dos números.
La clase prueba_max contiene el método principal main( ) y el método máximo( ). El método main( ) se diferencia de otros métodos
en que este es llamado por la maquina virtual Java, mientras que el método máximo( ) será invocado por main( ). Java exige que desde
un método estático solo se pueden llamar otros métodos estáticos por esa razón máximo( ) también tiene el modificador static, además
este método retorna un valor entero y recibe dos parámetros enteros.
Paso de los argumentos a los métodos:
Los argumentos se pasan a los métodos en Java por valor, esto significa que se hace una copia del tipo de dato recibido, en otras
palabras, tomemos como ejemplo el programa anterior, al leer los valores a num1 se le asigna el valor de 10 ya num2 el valor de 21
cuando se llama al método máximo( ), res = máximo( num1, num2), se pasan estos dos valores al mismo, este crea dos posiciones en
memoria donde se almacenan los valores suministrados por num1 y num2, dichas posiciones son a y b, de tal manera que si en el
método se modificara la información de a o b esto no alteraria los valores de num1 y num2. hagamos el siguiente ejemplo para
demostrar lo anterior:
class valor {
public static void main(String [ ] ar) {
int a = 70;
System.out.println(“Valor de a antes de llamar al método: “+ a);
metodo(a);
System.out.println(“Valor de a después de llamar al método: “+ a);
}
En la técnica de paso de parámetros por valor, el método que recibe no puede modificar la
variable que recibe el método como argumento (parámetro pasado).
Sobrecarga de métodos:
Técnica mediante la cual dos o mas métodos dentro de la misma clase tienen el mismo nombre y las declaraciones de sus parámetros
son diferentes. La sobrecarga es uno de los procedimientos mediante el cual Java implementa el Polimorfismo.
Cuando Java llama un método sobrecargado el compilador determina cual es el método invocado basándose en el numero o tipo de
argumento pasados; con lo cual los métodos sobrecargados deben tener diferentes tipos o numeraos de parámetro, cuando Java
encuentra una llamada a un método sobrecargado, ejecuta la versión del método cuyos parámetros coincidan con los argumentos
utilizados en la llamada. Ejemplo: se define una clase con
2 métodos sobrecargados, adición( ), diferenciándose uno del otro por el numero/tipo parámetro, el método main( ) llama a los dos
métodos.
class sobrecarga {
public static void main(String [ ] ar ) {
int num1 = 25, num2 = 200;
double nu1 = 125.45, nu2 = 34.25;
System.out.println(“Suma de enteros = “ + adicion(num1, num2)); System.out.println(“Suma de reales = “ +
adicion(nu1, nu2));
}
class Mates {
rand = Math.random(); x =
Math.abs( -123 );
y = Math.round( 123.567 ); z =
Math.pow( 2,4 );
max = Math.max( (float)1e10,(float)3e9 );
// Se imprimen en consola los números obtenidos de las operaciones
// anteriores para comprobar los resultados de la aplicación de
// los métodos definidos en la clase Math
System.out.println( rand ); System.out.println( x );
System.out.println( y ); System.out.println( z );
System.out.println( max );
} }
Vectores y matrices
Un vector (arreglo) es una manera de agrupar valores de un mismo tipo bajo un mismo nombre. Para acceder a los valores
individuales se asigna a cada uno de ellos un número denominado índice, el cual comienza en cero. En Java podemos declarar
vectores de dos maneras:
(tipo [ ] nombre_arreglo;)
El primer formato indica que es arreglo solo el identificador al que siguen los corchetes(c es un arreglo de caracteres y a una variable
de carácter), el segundo formato indica que todos los identificadores son arreglos del tipo (tanto p como d y f serian arreglos de
carácter).
Java no permite en la declaración del arreglo que se indique el tamaño del arreglo, ejemplo: int num[20]; en este caso se especifica que
el arreglo tendrá 20 elementos, esta declaración seria valida en C pero no en Java, el compilador produciría un error.
Para indicar el tamaño del arreglo se usa el operador new de la manera siguiente:
primero se declara el arreglo notas de tipo flota y posteriormente se reserva la memoria suficiente para que le arreglo almacene 20
elementos, esto se podría hacer en una sola sentencia, así:
float notas [ ] = new float [20];
Atributo length: Java considera cada arreglo un objeto, debido a esto podemos conocer el
numero de elementos de un arreglo a través de length, usando el siguiente formato:
nombre_variable = nombre_arreglo.length;
ejemplo:
double p [ ] = new double [20];
System.out.println(“Tamaño del arreglo: “ + p.length);
Inicialización de un arreglo:
Sea int c[ ] = new int [5]; para asignar valores a cada elemento del arreglo c se puede escribir:
c[0] = 6;
c[1] = 3;
c[2] = -2;
c[3] = 40;
c[4] = 16;
la primera sentencia fija el valor de c[0] en 6, la segunda el valor de c[1] en 3 y asi sucesivamente. Otra forma es asignar los valores en el
momento en que se inicializa el arreglo:
También podemos asignar valores a un arreglo mediante un ciclo for o while/do – while, siendo este el método más usado:
BufferedReader entrada = new BufferedReader (new InputStreamReader (System.in)); int c[ ], x;
c[ ] = new int[5]; for(x=0; x < 5;
++x) {
System.out.print(“De el elemento c[“ + x + “]: “);
System.out.flush( );
c[x] = Integer.parseInt(entrada.readLine());
}
El compilador de Java inicializara cualquier arreglo con un valor por defecto, cero, si el arreglo es de tipo real, entero o de carácter.
No es lo mismo un arreglo de caracteres que una cadena de caracteres, la cadena se almacena en objetos String, los arreglos de
caracteres son arreglo de tipo char, una secuencia de caracteres, con las mismas características que los arreglos de otro tipo.
Arreglos multidimensionales:
Los arreglos vistos anteriormente se conocen como arreglos unidimensionales ( una sola dimensión), los multidimensionales son los
que tiene mas de una dimensión, los usuales son los de dos dimensiones.
Como se declaran?:
ejemplo:
char tabla [ ][ ];
double [ ][ ] tasa, carga;
estas declaraciones no reservan memoria, para reservar memoria e indicar el numero de filas y columnas usamos new:
Inicialización:
1) asignación individual:
tabla[0][0] = tabla[1][0] =
‘a’; ‘j’;
tabla[0][1] = tabla[1][1] =
‘e’; ‘2’;
tabla[0][2] = tabla[1][2] =
‘c’; ‘#’;
2) asignación el momento en que se declara:
La manera de pasar parámetros en java es por valor. Cuando se pasa un objeto, realmente lo que se pasa es una
referencia al objeto, la cual no se puede modificar ( ya que pasa por valor); si se pueden modificar los datos
miembros del objeto. Los arreglos en Java se consideran objetos, por lo cual podrán modificarse los elementos del
arreglo, pero no la referencia a este. Ejemplo:
import java.io.*;
class maximo_valor {
public static void main(String [] ar) throws IOException {
BufferedReader en = new BufferedReader ( new InputStreamReader (System.in)); int a[] = new
int[5], x;
for(x=0; x < 5; ++x) { System.out.print(“De
a[“ + x + “]: “); System.out.flush( );
a[x] = Integer.parseInt(en.readLine( ));
}
System.out.println(“El mayor elemento del arreglo es: “ + máximo(a));
}
int y, mx;
mx = x[0];
for(y=0; y< x.length; ++y) mx = Math.max(mx,x[y]);
return mx;
}
}// fin clase máximo_valor
Cadenas
Una cadena es una secuencia de caracteres delimitados por comillas; Java no tiene el tipo cadena como tipo de dato
primitivo sino que declara varias clases para el manejo de cadenas, la más importante es la clase String. Cual cadena
es considerada un objeto String que es diferente de un arreglo de caracteres. Ejemplo:
a es un arreglo de caracteres.
String texto;
texto = new String(“La casa esta vacia”);
Esta clase dispone de diversos métodos para manipular cadenas: Sea a y b dos cadenas
Método Acción
length( ) : a.length retorna el numero de caracteres de la
cadena a
concat( ): a.concat(b) añade la cadena b al final de la
cadena a
charAt( ): a.charAt(2) retorna el carácter que esta en la
posición indicada (2) en la cadena a.
getChar( ): a.getChar(2,6,b,2) a partir de la posición 2 de la cadena a se extraen 6
caracteres los cuales se
almacenan en b a partir de la posición 2.
substring( ): b = a.substring(3,7) retorna todos los caracteres que están
entre la posición 3 y 7 menos uno de la cadena a. Siindicamos
a.substring(3) extrae caracteres desde la
posición hasta el final de la cadena.
Escribir un programa que llame a un método que determine cuantas palabras hay en una cadena
leída por el teclado.
Manejo de excepciones
Uno de los problemas más importantes en el desarrollo de software es la gestión de condiciones de error, por muy
bueno que sea el software siempre aparecen errores por múltiples razones. Una Excepción es, normalmente, una
condición de error imprevista, las cuales suelen terminar el programa del usuario con un mensaje de error
proporcionado por el sistema, los errores típicos entre otros son: agotamiento de memoria, errores de rango en el
manejo de los arreglos, división por cero, archivos inexistentes etc.
El manejo de excepciones es el mecanismo previsto por el lenguaje para el tratamiento de excepciones, permitiendo
al programador intentar la recuperación de estas condiciones y decidir si continuar o no la ejecución del programa.
Procesamiento de excepciones
De forma muy simple el modelo de un mecanismo de excepciones consta de dos palabras reservadas: try y catch.
try: bloque que contiene el código que puede generar una excepción.
catch: bloque que procesa una excepción.
Cuando durante la ejecución de un programa se produce un error que impide su ejecución se lanza una excepción
que hace que se visualice un mensaje acerca de lo ocurrido y se detenga la ejecución. Cuando esto ocurre si no
deseamos que la ejecución del programa se detenga habrá que utilizar try para poner en alerta al programa acerca del
código que pueda lanzar una excecion y utilizar catch para capturar y manejar cada excepción que se lance.
datoReal =
Double.parseDouble(lector.nextLine());
return datoReal;
} //Fin del bloque try
catch (NumberFormatException e) {
En el ejemplo anterior vemos que el bloque try intentamos convertir en double la cadena de caracteres devuelta por
nextLine, si se introduce una cadena que nos es convertible aun número real, el sistema lanzara una excepción del
tipo NumberFormatException que será atrapada por el bloque catch lo que dara lugar a que el método leerReal
devuelva un cero. Para probar el método anterior puede escribir en el método main el código siguiente:
double r = 0.0; do {
System.out.print(“De un numero real: “);
r = leerReal( );
} while (r == 0.0);
System.out.println(“El valor leído fue: “ + r);
Excepción Significado
AritmeticException Desbordamiento de memoria o división por cero.
NumberFormetException Conversión ilegal de una cadena a un tipo numérico.
IndexOutBoundsExeption Acceso a un elemento inexistente en un vector o en una
cadena.
NegativeArraySizeException Intento de creación de un vector de longitud negativa.
NullPointerException Intento de uso de una referencia nula.
ACTIVIDAD VIRTUAL:
a) CUESTIONARIO TÉCNICO
- Mencione por qué se utiliza un arreglo en vez de utilizar muchas variables para almacenar datos
b) CONCLUSIONES DE LA EXPERIENCIA