Still celebrating National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17

x
Solved

# Running Debugged vs. Non-Debugged

Posted on 2004-08-28
Medium Priority
217 Views
Hi,
I have a program that simulates a game many times and returns the percent of the time that each team won (8 teams).  I believe I have all the logics correct, but I'm finding some odd results.  When I run the program stepping through the lines (in debug mode obviously), it distributes the wins correctly.  However, when I simply run the program through for 100 trials, one team will win all 100 times.  And then if I run it again, another team will win 100 times.  Then again, and team 1 will win 84 times and team 2 will win 16 times and the other 6 teams won't win at all.  Now if I run the program through a million trials, it seems to distribute nicely.  I'm really confused as to why this would ever happen.  My logic is correct since as I said before, running the program debugged works fine.  This is C# dot net console program btw.

Here's my code:
using System;

namespace Project1
{
class Class1
{
public static void Main(string[] args)
{
int gameWinner;
double percentWon;
int[] teamGames = new int[8];

for (int xx = 1; xx <= 100; xx++)
{
gameWinner = Class1.RunGame();
teamGames[gameWinner]++;
}

for (int yy = 1; yy <= 8; yy++)
{
percentWon = (teamGames[yy - 1]/100.000);
Console.WriteLine("Team " + yy + " = " + percentWon);
}
}

public static int RunGame()
{
int team1, team2, teamondeck, pointmod, winner;
int[] teamWins = new int[8];

team1 = 1;
team2 = 2;
teamondeck = 3;
pointmod = 1;
Random r = new Random();

while (true)
{
if (r.NextDouble() >= .5)
{
teamWins[team1 - 1] = teamWins[team1 - 1] + pointmod;
if (teamWins[team1 - 1] >= 7)
{
winner = team1 - 1;
break;
}
team2 = teamondeck;
teamondeck++;
}
else
{
teamWins[team2 - 1] = teamWins[team2 - 1] + pointmod;
if (teamWins[team2 - 1] >= 7)
{
winner = team2 - 1;
break;
}
team1 = team2;
team2 = teamondeck;
teamondeck++;
}
if (teamondeck > 8)
{
teamondeck = 1;
pointmod = 2;
}
}
return winner;
}
}
}

I'd appreciate any help.  Thanks!!
0
Question by:schwarz2
[X]
###### Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

• Help others & share knowledge
• Earn cash & points
• Learn & ask questions

LVL 3

Accepted Solution

GrumbleBot earned 500 total points
ID: 11925787
I found by making the variable r a global variable your program works correctly. Not sure if I can explain why it doesn't work the way that you have it. But if i basically set up a random numbe rin a fuction and fill a listbox continually I get the same number for many consecutive values then it changes and repeats those many times , on and on.

Well here is your code modified and it seems to work now.

using System;

namespace Project1
{
class Class1
{
static Random r;

public static void Main(string[] args)
{
int gameWinner;
double percentWon;
int[] teamGames = new int[8];
r = new Random(); //((int)DateTime.Now.Ticks)

for (int xx = 1; xx <= 100; xx++)
{
gameWinner = Class1.RunGame();
teamGames[gameWinner]++;
}

for (int yy = 1; yy <= 8; yy++)
{
percentWon = (teamGames[yy - 1]/100.000);
Console.WriteLine("Team " + yy + " = " + percentWon);
}

}

public static int RunGame()
{
int team1, team2, teamondeck, pointmod, winner;
int[] teamWins = new int[8];

team1 = 1;
team2 = 2;
teamondeck = 3;
pointmod = 1;

while (true)
{
if (r.NextDouble() >= .5)
{
teamWins[team1 - 1] = teamWins[team1 - 1] + pointmod;
if (teamWins[team1 - 1] >= 7)
{
winner = team1 - 1;
break;
}
team2 = teamondeck;
teamondeck++;
}
else
{
teamWins[team2 - 1] = teamWins[team2 - 1] + pointmod;
if (teamWins[team2 - 1] >= 7)
{
winner = team2 - 1;
break;
}
team1 = team2;
team2 = teamondeck;
teamondeck++;
}
if (teamondeck > 8)
{
teamondeck = 1;
pointmod = 2;
}
}
return winner;
}
}
}

Hope this helps.

Good luck
0

Author Comment

ID: 11926547
Excellent, GrumbleBot!!  This was driving me crazy .. I guess C# doesn't re-seed the random variable when it's re-created.  Very strange, but I'm glad you caught it.  Thanks millions.
0

## Featured Post

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

C# And Nullable Types Since 2.0 C# has Nullable(T) Generic Structure. The idea behind is to allow value type objects to have null values just like reference types have. This concerns scenarios where not all data sources have values (like a databa…
Having new technologies does not mean they will completely replace old components.  Recently I had to create WCF that will be called by VB6 component.  Here I will describe what steps one should follow while doing so, please feel free to post any qu…
This course is ideal for IT System Administrators working with VMware vSphere and its associated products in their company infrastructure. This course teaches you how to install and maintain this virtualization technology to store data, prevent vuln…
Do you want to know how to make a graph with Microsoft Access? First, create a query with the data for the chart. Then make a blank form and add a chart control. This video also shows how to change what data is displayed on the graph as well as form…
###### Suggested Courses
Course of the Month4 days, 23 hours left to enroll

#### 670 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.