Solución Ejercicio 1:
Creamos la clase Assert_Identificador.java
public class Assert_Identificador
{
//Código Anterior a la J2SE 1.4
//assert como identificador.
public static void main(String[] args)
{
boolean assert;
assert = Integer.parseInt(args[0]) % 5 == 0;
if (assert) {
System.out.println("Correcto");
}
else{
System.out.println("No Correcto");
}
}
}
Compilamos normalmente y observamos el error:

Compilamos ahora indicando la versión 1.3 y observamos los warnings:

Ejecutamos:

Solución Ejercicio 2:
Creamos la clase Assert_PalabraClave.java.
Definimos un constructor con la longitud del array de edades como parámetro.
Creamos un método público setEdad(int pos, int valor) para dar valores a las posiciones del array.
En este método público setEdad, validamos los argumentos lanzando excepciones si no son correctos. Quitaremos estas comprobaciones para provocar que salte la assertion posteriormente.
Creamos el método privado mediaEdades() que calcula la media e incluye la assertion que supone que la media siempre será >0.
public class Assert_PalabraClave{
private int[] edades;
public Assert_PalabraClave (int tam){
edades = new int[tam];
}
public void setEdad(int i, int valor){
/* En un método público no podemos usar assertions para comprobar los
argumentos, se deben lanzar excepctions si no son válidos. Comentar
los ifs y exceptions para dejar solo this.edades[i] = valor y
poder poner en el main un valor negativo que haga saltar
la assertion en mediaEdades. */
if (iedades.length-1){
throw new IllegalArgumentException("\nPosicion: " + i + " fuera de rango del array");
}
else if (valor < 0){
throw new IllegalArgumentException("\nValor: " + valor + " menor de 0");
}
else{
this.edades[i] = valor;
}
}
private float mediaEdades(){
int suma = 0;
float media = 0;
int i;
for (i=0; i 0): "La media no es mayor que cero, es: " + media;
return media;
}
public static void main (String[] args)
{
Assert_PalabraClave apc = new Assert_PalabraClave(5);
apc.setEdad(0, 10);
apc.setEdad(1, 3);
apc.setEdad(2, 4);
apc.setEdad(3, 7);
apc.setEdad(4, 23);
//apc.setEdad(4, -100); //para provocar excepción por valor menor de cero.
//apc.setEdad(5, 39); //para provocar excepción por posición fuera de rango.
System.out.println("La media de edad es: " + apc.mediaEdades());
}
Compilamos con -source 1.3 para observar el error:
Compilarmos normalmente y ejecutamos habilitando assertions:
Modificamos el código fuente para hacer saltar la assertion, compilamos y ejecutamos:
Solución Ejercicio 3:
En el constructor no se puede utilizar un assertion para comprobar los argumentos, ya que es público y esencial que al construirse el objeto se garantice que sus atributos tengan valores válidos. Modificar con excepciones.
Los asserts en los métodos públicos subir(int personas) y bajar(int personas) son correctos ya que no están comprobando los valores del argumento personas, sino el estado final de los atributos del objeto bus.
El assert que comprueba los argumentos pasados en la línea de comandos al programa también es un uso inapropiado. Modificar con excepciones.
Solución Ejercicio 4:
Escribimos un switch sencillo que según el entero nos imprima el día de la semana que le correspondería.
public class AssertSwitch{
public static void mostrarDiaSemana(int dia)
{
switch(dia){
case 1: System.out.println("Lunes");
break;
case 2: System.out.println("Martes");
break;
case 3: System.out.println("Miercoles");
break;
case 4: System.out.println("Jueves");
break;
case 5: System.out.println("Viernes");
break;
case 6: System.out.println("Sabado");
break;
case 7: System.out.println("Domingo");
break;
default:
assert(false): "Int Dia pasado: " + dia;
}
}
public static void main (String[] args){
mostrarDiaSemana(3);
mostrarDiaSemana(9); //Se supone que este valor nunca se daria
}
}
Me gusta esto:
Me gusta Cargando...