|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#41 | |
|
Senior Member
Iscritto dal: Jul 2005
Città: Silent Hill
Messaggi: 1471
|
Quote:
__________________
DIAMOND CRUSH - Aut viam inveniam, aut faciam. |
|
|
|
|
|
|
#42 | |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
|
|
|
|
|
|
|
#43 |
|
Senior Member
Iscritto dal: Nov 2005
Città: Bologna
Messaggi: 1303
|
Modificata GemFactory:
Codice:
private static final GemType CHEST_TYPES[] = { DIAMOND_CHEST, RUBY_CHEST, SAPPHIRE_CHEST, EMERALD_CHEST, TOPAZ_CHEST };
Codice:
public Gem createRandomChest()
{
int module = CHEST_TYPES.length - 1;
if(firstExtraction)
{
module = CHEST_TYPES.length;
firstExtraction = false;
}
int randomIndex = randomGenerator.extract(module);
if(randomIndex >= secondRandomGemIndex)
{
randomIndex = (randomIndex + 1) % CHEST_TYPES.length;
}
secondRandomGemIndex = firstRandomGemIndex;
firstRandomGemIndex = randomIndex;
return create(CHEST_TYPES[randomIndex]);
}
|
|
|
|
|
|
#44 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 1545
|
ragazzi non capisco a cosa serve firstExtraction... c'era anche prima lo so
|
|
|
|
|
|
#45 |
|
Senior Member
Iscritto dal: Nov 2005
Città: Bologna
Messaggi: 1303
|
Ok...prossimo test per controllare che le percentuali di creazione siano del 90 e 10 rispettiavamente per Gem e Chest:
Codice:
public void testCorrectGemAndChestProportion()
{
int[] percentages={0,1,89,1,90,1,99,1};
factory = GemFactory.createForTesting(new MockRandomGenerator(percentages));
Gem gem=factory.createRandomDroppable();
assertFalse("does not return a Gem", gem.getType().isChest() );
gem=factory.createRandomDroppable();
assertFalse("does not return a Gem", gem.getType().isChest() );
gem=factory.createRandomDroppable();
assertTrue("does not return a Chest", gem.getType().isChest() );
gem=factory.createRandomDroppable();
assertTrue("does not return a Chest", gem.getType().isChest() );
}
Sotto col codice Ultima modifica di Bonfo : 26-01-2006 alle 15:50. |
|
|
|
|
|
#46 | |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
chiedi a cionci |
|
|
|
|
|
|
#47 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
Se tiriamo fuori le estrazioni successive da una popolazione pari a N dobbiamo aumentare di 1 se la gemma è uguale a quella che non può essere estratta... NO, è un procedimento errato in quanto c'è un elemento che avrebbe probabilità 2/N di essere estratto, mentre gli altri avrebbero probabilità 1/N (ve lo assicuro che si notava nella sequenza delle gemme estratte che c'era qualcosa che non andava)... Ora succede questo: Popolazione prima estrazione: 1 2 3 4 5 (firstExtraction serve proprio per questo caso) Popolazione successive estrazioni 1 2 3 4 Mettiamo che la penultima gemma estratta sia 2, quindi se la gemma estratta è maggiore o uguale a 2 ne verrà incrementato di 1 il valore, la nuova estrazione è stata di fatto su una popolazione composta da: 1 3 4 5 in questo modo si mantiene una probabilità uguale per TUTTE le gemme... |
|
|
|
|
|
|
#48 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Attenzione che se mantenete first e secondRandomGemExtracted così come sono un diamond_chest non potrà essere estratto dopo un diamond_gem e viceversa...
|
|
|
|
|
|
#49 |
|
Senior Member
Iscritto dal: Nov 2005
Città: Bologna
Messaggi: 1303
|
Lo so cionci...ma i test passavano
Quindi mi sa che dobbiamo fare un test anche su quello. |
|
|
|
|
|
#50 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 1545
|
Cionci capisco che è corretto così ma non sarebbe più semplice un:
"continua ad estrarre finchè estrai una gemma diversa da quella che non dobbiamo estrarre" Così mi pare complicato da interpretare ed introduce un po' tante variabili... IMHO eh edit: effettivamente capisco che così ci togliamo il problema del caso sfortunato in cui infinitamente estrae la stessa gemma... Ultima modifica di Ufo13 : 26-01-2006 alle 16:09. |
|
|
|
|
|
#51 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
A parte che introduce solo la variabile firstExtraction... non vedo quale altra variabile ci sia in più....forse module, ma è locale...
Quote:
|
|
|
|
|
|
|
#52 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Cerco di rispiegare...così forse riesco a farvi capire meglio:
popolazione = N-1; Se è la prima estrazione: popolazione = N; numero = estrai(popolazione); Se numero >= numero_che_non_può_essere_estratto: numero++; Le altre variabili servono comunque ad ogni costo...indipendentemente dall'estrarre nuovamente un numero o dal togliere firstExtraction... Poi se a fek va bene...ben venga... |
|
|
|
|
|
#53 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
cionci, ora ho capito perfettamente il motivo percui hai usato la variabile firstExtraction, ma non puoi lasciare non testato un aspetto del codice: è giusto che il programma funzioni così, ma la cosa deve essere formalizzata; se non riesci a fare un test per quell'aspetto ci provo io quando finisco questo task
|
|
|
|
|
|
#54 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 1545
|
Al fatto del ciclo infinito ci sono arrivato e sono d'accordo con te però il metodo mi pare un po' complicato ora come ora... vabè vediamo...
firstRandomIndex non mi pare serva... e poi non ho ancora capito perchè se è >= dell'indice incrementa... Cioè mi sono spiegato male... Non capisco il ruolo di first e second... Ultima modifica di Ufo13 : 26-01-2006 alle 16:26. |
|
|
|
|
|
#55 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
Popolazione successive estrazioni: 1 2 3 4 Mettiamo che la penultima gemma estratta sia 2, quindi se la gemma estratta è maggiore o uguale a 2 ne verrà incrementato di 1 il valore, la nuova estrazione è stata di fatto su una popolazione composta da: 1 3 4 5 in questo modo si mantiene una probabilità uguale per TUTTE le gemme... |
|
|
|
|
|
|
#56 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
|
|
|
|
|
|
|
#57 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
codice per risolvere il precedente test:
Codice:
public Gem createRandomDroppable()
{
if (randomGenerator.extract(100) >= 90)
{
return createRandomChest();
}
else
{
return createRandomGem();
}
}
Codice:
public void testSameIndexForGemAndChest()
{
int[] percentages={1, 0, 1};
factory = GemFactory.createForTesting(new MockRandomGenerator(percentages));
Gem gem = factory.createRandomGem();
assertSame(gem.getType(), RUBY);
factory.createRandomGem();
gem = factory.createRandomChest();
assertSame(gem.getType(), RUBY_CHEST);
}
Ultima modifica di 71104 : 26-01-2006 alle 16:35. |
|
|
|
|
|
#58 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
Serve appunto per fare in modo che il nuovo elemento estratto sia diverso dal penultimo estratto (e non dall'ultimo, altrimenti bastava una sola variabile)... |
|
|
|
|
|
|
#59 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
71104: quando avete finito testa che sia possibile estratte un diamond_gem dopo un diamond_chest
|
|
|
|
|
|
#60 | |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 1545
|
Quote:
Le gemme precedenti hanno probabilità maggiore di uscire rispetto a quelle successive così o no? |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 08:19.




















