TECHNOLOGIES
FORUMS
JOBS
BOOKS
EVENTS
INTERVIEWS
Live
MORE
LEARN
Training
CAREER
MEMBERS
VIDEOS
NEWS
BLOGS
Sign Up
Login
No unread comment.
View All Comments
No unread message.
View All Messages
No unread notification.
View All Notifications
Answers
Post
An Article
A Blog
A News
A Video
An EBook
An Interview Question
Ask Question
Forums
Monthly Leaders
Forum guidelines
Bill Cappoli
NA
12
0
Problem with array and program taking so long to run
Nov 23 2008 11:54 PM
I have a program that I'm developing for a class. I have to generate 10,000 random 3 digit numbers and keep track of how often each one comes up. Once complete the program should display 10 most common and the 10 least common numbers. The problem I'm facing is that when I run the program it seems to just run for a long time and than after a few minutes throws an out of index error at line 50 which reads as such lotteryNumbers[i, 1]++;. I have included my code below. Anyone have any ideas of what I'm doing wrong with the array and how I might speed up the application.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace William_Cappoli_IT466_Unit_3_Project
{
public partial class frmMain : Form
{
// Array to hold numbers 000 - 999 and count occurance
int[,] lotteryNumbers = new int[1000, 2];
// Array to hold 10 most frequent numbers
int[,] maxNumbers = new int[10, 2];
// Array to hold l0 least frequent numbers
int[,] minNumbers = new int[10, 2];
// stores most recently generated number
int currentNum;
// random number generator
Random randomNumbers = new Random();
public frmMain()
{
InitializeComponent();
fillLotteryArray();
}
private void btnGenerate_Click(object sender, EventArgs e)
{
fillMinNumbersArray();
// clears out labels displaying minimum and maximum number lists
lblDisplayMostCommon.Text = "";
lblDisplayLeastCommon.Text = "";
for (int i = 0; i < 10000; ++i)
{
currentNum = randomNumbers.Next(999);
for (int j = 0; j < 1000; ++j)
{
if (lotteryNumbers[j, 0] == currentNum)
{
lotteryNumbers[i, 1]++;
}
}
maxNumber();
minNumber();
}
} // btnGenerate_Click method
private void fillLotteryArray() //Fill lottery number array with values 000 - 999
{
for (int i = 0; i < 1000; ++i)
{
lotteryNumbers[i, 0] = i;
}
} // end fillLotteryArray()
private void fillMinNumbersArray() //Fill minimum numbers array with value 5000
{
for (int i = 0; i < 10; ++i)
{
minNumbers[i, 1] = 5000;
}
} // fillMinNumbersArray()
public void maxNumber() // Find 10 most frequent numbers
{
for (int j = 0; j < 1000; ++j) // Loop for all 1000 lottery numbers
{
for (int i = 0; i < 10; ++i) // Loop for the 10 maximum numbers
{
if (lotteryNumbers[j, 1] > maxNumbers[i, 1]) // Check if there is a more fequent number than the one stored at each index
{
for (int h = 9; h > i; --h) // Starting with index 9, store previous index value until you reach the index that will store the new value
{
maxNumbers[h, 1] = maxNumbers[h - 1, 1];
maxNumbers[h, 0] = maxNumbers[h - 1, 0];
}
maxNumbers[i, 1] = lotteryNumbers[j, 1]; // Store new values at slated index
maxNumbers[i, 0] = lotteryNumbers[j, 0];
i = 10;
}
}
}
for (int i = 0; i < 10; ++i) // Display each number and its frequency
{
lblDisplayMostCommon.Text += maxNumbers[i, 0].ToString("000") + " " + Convert.ToString(maxNumbers[i, 1]) + "\n";
}
} // end maxNumber method
public void minNumber() // Find 10 least frequent numbers
{
for (int j = 0; j < 1000; ++j) // Loop for all 1000 lottery numbers
{
for (int i = 0; i < 10; ++i) // Loop for the 10 minimum numbers
{
if (lotteryNumbers[j, 1] > 0 & lotteryNumbers[j, 1] < minNumbers[i, 1]) // Check if there is a less frequent number than the one stored at each index disregarding numbers that have not been drawn
{
for (int h = 9; h > i; --h) // Starting with index 9, store previous index value until you reach the index that will store the new value
{
minNumbers[h, 1] = minNumbers[h - 1, 1];
minNumbers[h, 0] = minNumbers[h - 1, 0];
}
minNumbers[i, 1] = lotteryNumbers[j, 1]; // Store new values at slated index
minNumbers[i, 0] = lotteryNumbers[j, 0];
i = 10;
}
}
}
for (int i = 0; i < 10; ++i) // Display each number and its frequency
{
lblDisplayLeastCommon.Text += minNumbers[i, 0].ToString("000") + " " + Convert.ToString(minNumbers[i, 1]) + "\n";
}
} // end minNumbers method
} // form1 partial class
} // end namespace
Thanks for your help
Reply
Answers (
2
)
remove unwanted characters from VS.Net 2005 editor
Getting Problem in Outlook Contact Item Event Handling