Foros aprenderaprogramar.com
Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: ivan15 en 24 de Octubre 2015, 00:21
-
Hola, estuve haciendo este ejercicio que me dieron
2. Implementar la clase DiasLluviosos, con sus respectivas pruebas unitarias, donde se almacene si llovió o no en un día del año y cuente con los siguientes métodos:
- void registrarQueLlovioElDia (int diaDeAño, boolean llovio)
- boolean consultarSiLlovioElDia (int diaDelAño)
- int contarDiasLluviosos ()
- int consultarCuatrimestreMasLluvioso()
- int consultarPrimerDiaConLluvia()
Pero me tira un error cuando quiero hacer una prueba con jUnit para probar el cuatrimestre mas lluvioso, alguien podria darme alguna mano?
aca dejo el codigo del pronostico:
package guia7Arrays;
public class DiasLluviosos {
private boolean[] dias;
public DiasLluviosos() {
dias = new boolean[365];
for (int i = 0 ; i < dias.length ; i++) {
dias[i] = false;
}
}
public void registrarQueLlovioElDia(int diaDeAño, boolean llovio) {
validarDia(diaDeAño);
dias[diaDeAño] = llovio;
}
public boolean consultarSiLlovioElDia(int diaDelAño) {
validarDia(diaDelAño);
return dias[diaDelAño];
}
public int contarDiasLluviosos() {
int diasLluviosos = 0;
for(int i = 0; i < dias.length ; i++) {
if(dias[i] == true) {
diasLluviosos++;
}
}
return diasLluviosos;
}
public int consultarCuatrimestreMasLluvioso() {
int cuatrimestreMasLluvioso = 0;
int cuatrimestres[];
cuatrimestres = new int[3];
cuatrimestres[0] = diasLlovidosEnRango(1 , 121);
cuatrimestres[1] = diasLlovidosEnRango(121 , 243);
cuatrimestres[2] = diasLlovidosEnRango(244 , 365);
if(cuatrimestres[0] < cuatrimestres[1] ) {
cuatrimestreMasLluvioso = 0;
} else {
if(cuatrimestres[0] < cuatrimestres[2] ) {
cuatrimestreMasLluvioso = 1;
}
}
if(cuatrimestres[1] < cuatrimestres [2] ) {
cuatrimestreMasLluvioso = 2;
}
return cuatrimestreMasLluvioso;
}
public int consultarPrimerDiaConLluvia() {
boolean primerDiaLluviosoNoEncontrado = true;
int primerDiaConLluvia = 0;
for(int i = 0 ; i < dias.length && primerDiaLluviosoNoEncontrado ; i++ ) {
if(dias[i] == true) {
primerDiaLluviosoNoEncontrado = false;
primerDiaConLluvia = i;
}
}
return primerDiaConLluvia;
}
private int validarDia(int diaDeAño) {
Error diaIncorrecto = new Error("dia fuera del rango (0 ; 365]");
if(diaDeAño <= 0 || diaDeAño > 365) {
throw diaIncorrecto;
}
return diaDeAño;
}
private int diasLlovidosEnRango( int inicio, int fin ){
int total = 0;
for( int i = inicio; i <= fin; i++ ) {
if ( dias[i] ) {
total++;
}
}
return total;
}
}
y aca el codigo de la prueba que me tira error, es la que se llama consultarCuatrimestreMasLluvioso
package pruebasJUnit;
import guia7Arrays.DiasLluviosos;
import org.junit.Test;
import org.junit.Assert;
public class pruebasDiasLluviosos {
@Test
public void probarSiInicializaConTodosLosDiasSinLlover() {
DiasLluviosos dias = new DiasLluviosos();
int diasConLluvia = dias.contarDiasLluviosos();
Assert.assertEquals(0, diasConLluvia);
}
@Test
public void probarSiRegistraDiasLluviosoYLosCuenta() {
DiasLluviosos dias = new DiasLluviosos();
dias.registrarQueLlovioElDia(1, true);
dias.registrarQueLlovioElDia(2, true);
dias.registrarQueLlovioElDia(3, true);
int diasConLluvia = dias.contarDiasLluviosos();
Assert.assertEquals(3, diasConLluvia);
}
@Test
public void probarConsultarSiLlovioElDia() {
DiasLluviosos dias = new DiasLluviosos();
dias.registrarQueLlovioElDia(3, true);
boolean llovioElDia = dias.consultarSiLlovioElDia(3);
Assert.assertTrue(llovioElDia);
}
@Test
public void probarConsultarPrimerDiaConLluvia() {
DiasLluviosos dias = new DiasLluviosos();
dias.registrarQueLlovioElDia(340, true);
int primerDiaQueLlovio = dias.consultarPrimerDiaConLluvia();
Assert.assertEquals(340, primerDiaQueLlovio);
}
@Test
public void consultarCuatrimestreMasLluvioso() { /*<--------Preguntar porque me tira error en esta prueba*/
DiasLluviosos dias = new DiasLluviosos();
dias.registrarQueLlovioElDia(121, true);
dias.registrarQueLlovioElDia(130, true);
dias.registrarQueLlovioElDia(140, true);
dias.registrarQueLlovioElDia(145, true);
dias.registrarQueLlovioElDia(150, true);
dias.registrarQueLlovioElDia(160, true);
dias.registrarQueLlovioElDia(166, true);
dias.registrarQueLlovioElDia(200, true);
int cuatrimestreMasLluvioso = dias.consultarCuatrimestreMasLluvioso();
Assert.assertEquals(1 , cuatrimestreMasLluvioso);
}
}
tambien les dejo el error que me tira, saludos y gracias de ante mano
(http://i.imgur.com/EcIGhDX.jpg)
-
Hola!
Aquí parece que tienes un problema: i <= fin dentro del método private int diasLlovidosEnRango( int inicio, int fin )
private int diasLlovidosEnRango( int inicio, int fin ){
int total = 0;
for( int i = inicio; i <= fin; i++ ) {
if ( dias[i] ) {
total++;
}
}
return total;
}
Los índices del array de días van de 0 a 364, si tú haces una llamada como cuatrimestres[2] = diasLlovidosEnRango(244 , 365);
al pasar el 365 no estás dentro de los índices del array y te tira un error.
Tienes que pensar si estos índices:
cuatrimestres[0] = diasLlovidosEnRango(1 , 121);
cuatrimestres[1] = diasLlovidosEnRango(121 , 243);
cuatrimestres[2] = diasLlovidosEnRango(244 , 365);
Debes cambiarlos
cuatrimestres[0] = diasLlovidosEnRango(0 , 120);
cuatrimestres[1] = diasLlovidosEnRango(121 , 242);
cuatrimestres[2] = diasLlovidosEnRango(243 , 364);
Habría que revisar todos los índices y hacer pruebas.
Saludos!
-
gracias, muchas gracias ya pude arreglarlo! era eso que mencionaste