Naime - ovo if oko koga mi nije bilo jasno evoluira već izmjenjenu vriijednost moneyNeeded - tj. ne istu onu vrijednost koja je bila kod evaluacije kod prvog if...
Rešavao sam neki zadačić - http://www.home.hs-karlsruhe.d...n/en/flowcontrol.html#roulette
I onda sam prvo uradio nešto slično njihovom rešenju (ovo sa moneyNeededOld promjenljivom) i onda shvatio da ako uzmem u obzir da sam do nekog kruga round već zaradio round-1 evro i da i njih mogu trošiti zajedno sa početnim ulogom - napravio sam i malo bolji račun (sa moneyNeeded promjenljivom)...
Međutim - kada sam program pokretao htio sam da malo sredim i da mi ne prijavljuje dva puta istu vrednost - kada odgovara i po starom i po novom - jer sam shvatio da svaka vrijednost koja odgovara po novom računu odgovara i po starom - pa sam ubacio jedno if na println kod starog računa u kojem kao logičku vrijednost imam negaciju nejednakosti iz novog računa - ali i dalje pomenuta linija svaki put izađe na ekran...
Code:
public class Rulet {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
long moneyNeeded = 0;
long moneyNeededOld = 0;
int numberRounds = 0;
int numberRoundsOld = 0;
for (int round=1;round<10000;round++)
{
long wager=1;
while (Math.random()<0.5)
{
wager=2*wager;
}
if (wager>moneyNeeded+round-1) /prvo if
{
moneyNeeded=wager;
System.out.println("U krugu broj "+round+" je potrebno "+moneyNeeded);
numberRounds++;
}
if (wager>moneyNeededOld){
moneyNeededOld=wager;
if (!(wager>moneyNeeded+round-1)) /ovo je negacija prvog if - pa se ipak aktivira svaki put kad i prvi if
{
System.out.println("Po starom u krugu broj "+round+" je potrebno "+wager);
}
numberRoundsOld++;
}
}
System.out.println("Potrebno je para "+moneyNeeded+", i desice se krugova "+numberRounds);
System.out.println("Po starom potrebno je para "+moneyNeededOld+", i desice se krugova "+numberRoundsOld);
}
}
public class Rulet {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
long moneyNeeded = 0;
long moneyNeededOld = 0;
int numberRounds = 0;
int numberRoundsOld = 0;
for (int round=1;round<10000;round++)
{
long wager=1;
while (Math.random()<0.5)
{
wager=2*wager;
}
if (wager>moneyNeeded+round-1) /prvo if
{
moneyNeeded=wager;
System.out.println("U krugu broj "+round+" je potrebno "+moneyNeeded);
numberRounds++;
}
if (wager>moneyNeededOld){
moneyNeededOld=wager;
if (!(wager>moneyNeeded+round-1)) /ovo je negacija prvog if - pa se ipak aktivira svaki put kad i prvi if
{
System.out.println("Po starom u krugu broj "+round+" je potrebno "+wager);
}
numberRoundsOld++;
}
}
System.out.println("Potrebno je para "+moneyNeeded+", i desice se krugova "+numberRounds);
System.out.println("Po starom potrebno je para "+moneyNeededOld+", i desice se krugova "+numberRoundsOld);
}
}
Rezultat je (zavisi od random funkcije - pa ćete dobiti drugačije brojke)
Code:
U krugu broj 1 je potrebno 2
Po starom u krugu broj 1 je potrebno 2 /zašto se ovo aktiviralo???
Po starom u krugu broj 9 je potrebno 8
U krugu broj 11 je potrebno 1024
Po starom u krugu broj 11 je potrebno 1024 /zašto se ovo aktiviralo???
Po starom u krugu broj 2048 je potrebno 2048
Po starom u krugu broj 6556 je potrebno 4096
Potrebno je para 1024, i desice se krugova 2
Po starom potrebno je para 4096, i desice se krugova 5
U krugu broj 1 je potrebno 2
Po starom u krugu broj 1 je potrebno 2 /zašto se ovo aktiviralo???
Po starom u krugu broj 9 je potrebno 8
U krugu broj 11 je potrebno 1024
Po starom u krugu broj 11 je potrebno 1024 /zašto se ovo aktiviralo???
Po starom u krugu broj 2048 je potrebno 2048
Po starom u krugu broj 6556 je potrebno 4096
Potrebno je para 1024, i desice se krugova 2
Po starom potrebno je para 4096, i desice se krugova 5