/**
* Clase Test. Mantiene información de los datos de un test
*
* @author Fco Gutiérrez MAQUINA: propia
* @version 1.0 4/2/2001
*/
public class Test
{
// Variables de clase
static private int ValorPositivas; // Valor de una respuesta acertada
static private int ValorNegativas; // Valor de una respuesta fallada
// variables de instancia
private int numModelos; // Número de modelos distintos
private int numPreguntas; // Preguntas en cada modelo
private String [] respCorrectas; // Respuestas por modelo
// Por defecto se toman estos valores
static {
ValorPositivas = 3;
ValorNegativas = -1;
}
/**
* ValorPositivas. Modifica el valor de una pregunta acertada
*
* @param vp nuevo valor para las preguntas acertadas
* @return
*/
public static void ValorPositivas(int vp) {
ValorPositivas = vp;
}
/**
* ValorNegativas. Modifica el valor de una pregunta fallada
*
* @param vn nuevo valor para las preguntas falladas
* @return
*/
public static void ValorNegativas(int vn) {
ValorNegativas = vn;
}
/**
* Constructor para objetos de la clase Test
* @param nMod Número de modelos que tendrá el test
* @param nRpsMod Número de preguntas por modelo
*/
public Test(int nMod, int nPrgMod) {
// initializa las variables de instancia
numModelos = nMod;
numPreguntas = nPrgMod;
respCorrectas = new String[numModelos+1]; // No utilizamos la pos 0
}
/**
* respModelo - Indica la respuenta correcta a un modelo dado
*
* @param i Número de modelo
* @param s Respuesta correcta
* @return
*/
public void respModelo(int i,String rC) throws Exception {
// escriba su código aquí
if (rC.length() != numPreguntas) {
throw (new Exception("respModelo: Longitud inválida en Modelo"+rC));
} else if ((i<=0)|| (i>numModelos)) {
throw (new Exception("respModelo: Número de modelo no válido"+i));
}
respCorrectas[i] = rC;
}
/**
* corrigeModelo - Corrige un modelo dado
*
* @param i Número de modelo
* @param rM Respuesta dada al modelo i
* @return Puntuación obtenida
*/
public int corrigeModelo(int i,String rM) throws Exception {
// escriba su código aquí
if (rM.length() != numPreguntas) {
throw (new Exception("corrigeModelo: Longitud inválida en Modelo"+rM));
} else if ((i<=0)||(i>numModelos)) {
throw (new Exception("corrigeModelo: Número de modelo no válido"+i));
}
int a=0,b=0,f=0; // aciertos, en blanco, fallos
for (int x=0;x<numPreguntas;x++) {
char c = rM.charAt(x);
char r = respCorrectas[i].charAt(x);
if (c == ' ') {
b++;
} else if (c==r) {
a++;
} else {
f++;
}
}
return a*ValorPositivas+f*ValorNegativas;
}
/**
* numModelos Devuelve el número de modelos
*
* @return el número de modelos
*/
public int numModelos() {
return numModelos;
}
/**
* numPreguntas Devuelve el número de preguntas por modelo
*
* @return El número de preguntas por modelo
*/
public int numPreguntas() {
return numPreguntas;
}
}