You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

75 lines
2.3 KiB

package Model;
import java.util.Random;
import java.util.random.RandomGenerator;
public class GenBoundedRealist implements GenerationStrat{
private double min;
private double max;
private double generatedValue;
private boolean boundBlocked = false;
private Random random;
private double lastValue;
private boolean firstused = false;
public GenBoundedRealist(double min, double max, double firstValue){
if(min > max){ //Si la borne inférieure à une plus grande valeur que la borne supérieure, on les inverse
double temp = min;
min = max;
max = temp;
}
//On définit le minimum possible à -50 °
if(min < -50){
min = -50;
}
this.min=min;
//En réaliste, on ne va pas au dessus de 50°C
if(max > 50){
max = 50;
}
this.max=max;
lastValue=firstValue;
this.random = new Random();
}
@Override
public double generate() {
//Si on a déjà utilisé la première valeur, on génère une nouvelle valeur
if(firstused){
//On génère la nouvelle valeur
generatedValue = random.nextDouble() * (max - min) + min;
lastValue = lastValue + (random.nextDouble() * (max - min) + min);
//On fait attention à ce que la valeur finale reste dans les bornes
if(lastValue + generatedValue > max){
boundBlocked = true; //On renseigne qu'on a bloqué la génération aux bornes
lastValue = max;
}
if(lastValue + generatedValue < min){
boundBlocked = true; //On renseigne qu'on a bloqué la génération aux bornes
lastValue = min;
}
//Si la valeur s'est heurtée aux bornes, on réinitialise le booleen et retourne la valeur telle quelle
if(boundBlocked){
boundBlocked = false;
return lastValue;
}
//Sinon, on retourne la nouvelle valeur
return lastValue + generatedValue;
}
//Dans la cas on l'on avait pas encore passé la première valeur, on la renvoi et on précise que la première valeur a été utilisée
firstused = true;
return lastValue;
}
}