Hi Member,
Althoug I think you won't learn much in programming if you don't try to solve your homework for yourself, it was fun for me to create a little sample application for you.
So maybe you find it interesting to see how I would approach the problem. The calculations you need to do a "crying" for a solution with LINQ - but if you have to avoid linq you can replace them with manual "looping".
Your current code has many "beginner" errors or is more complicated than needed. I didn't bother to "correct" it. Keep some simple rules in mind to make your live easier:
* Use proper variable names - f, s bp won't help you to understand what you have written - This is the
most important thing in any kind of programming (no joke, I have decades of programming experience - just believe me) - find good names and use them!
* Don't do too much things "at once" - split your application in small, easy steps
* Use the Framework (or other existing code) so you don't have to "reinvent the wheel".
Long talk - short code: You can just copy following code to a new WindowsForms project (I used .NET 4.5.1), and replace the content of the pre-generated Program.cs file and let it run. For brevity I ommited the error handling (what if the file doesn't contain integers and so on - you'll have to do this for yourself if you want).
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Windows.Forms;
namespace NumberFiles
{
static class Program
{
public class MainForm : Form
{
ListBox m_lbNumbers;
Label m_labelResult;
public MainForm()
{
Width = 640;
Height = 480;
ToolStrip ts = new ToolStrip();
ToolStripButton buttonOpenFile = new ToolStripButton { Text = "Open File" };
buttonOpenFile.Click += buttonOpenFile_Click;
ToolStripButton buttonGetMaximumNumber = new ToolStripButton { Text = "Max. Nr." };
buttonGetMaximumNumber.Click += buttonGetMaximumNumber_Click;
ToolStripButton buttonCountMaximumNumber = new ToolStripButton { Text = "Count Max. Nr." };
buttonCountMaximumNumber.Click += buttonCountMaximumNumber_Click;
ToolStripButton buttonCalculateAverage = new ToolStripButton { Text = "Calculate Average" };
buttonCalculateAverage.Click += buttonCalculateAverage_Click;
ToolStripButton buttonGetMaximumNumberOfSelectedNumbers = new ToolStripButton { Text = "Max. Nr. from Selection" };
buttonGetMaximumNumberOfSelectedNumbers.Click += buttonGetMaximumNumberOfSelectedNumbers_Click;
ts.Items.AddRange(new ToolStripItem[] { buttonOpenFile, buttonGetMaximumNumber, buttonCountMaximumNumber, buttonCalculateAverage, buttonGetMaximumNumberOfSelectedNumbers });
m_lbNumbers = new ListBox { Dock = DockStyle.Fill, SelectionMode = SelectionMode.MultiExtended };
m_labelResult = new Label { Dock = DockStyle.Bottom };
Controls.Add(m_lbNumbers);
Controls.Add(ts);
Controls.Add(m_labelResult);
}
void buttonOpenFile_Click(object sender, EventArgs e)
{
OpenFileDialog ofd = new OpenFileDialog { Title = "Select a file containing numbers" };
if (ofd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
string[] astrLines = File.ReadAllLines(ofd.FileName);
m_lbNumbers.Items.Clear();
foreach (string strLine in astrLines)
m_lbNumbers.Items.Add(Convert.ToInt32(strLine));
}
}
void buttonGetMaximumNumber_Click(object sender, EventArgs e)
{
IEnumerable<int> numbers = m_lbNumbers.Items.Cast<int>();
int iMaxNr = numbers.Max();
m_labelResult.Text = String.Format("Maximum number was {0}", iMaxNr);
}
void buttonCountMaximumNumber_Click(object sender, EventArgs e)
{
IEnumerable<int> numbers = m_lbNumbers.Items.Cast<int>();
int iMaxNr = numbers.Max();
int iCount = numbers.Count(n => n == iMaxNr);
m_labelResult.Text = String.Format("Maximum number was {0}, it appears {1} times.", iMaxNr, iCount);
}
void buttonCalculateAverage_Click(object sender, EventArgs e)
{
IEnumerable<int> numbers = m_lbNumbers.Items.Cast<int>();
double dAverage = numbers.Average();
m_labelResult.Text = String.Format("Average of all numbers is {0}", dAverage);
}
void buttonGetMaximumNumberOfSelectedNumbers_Click(object sender, EventArgs e)
{
if(m_lbNumbers.SelectedItems.Count > 0)
{
IEnumerable<int> numbers = m_lbNumbers.SelectedItems.Cast<int>();
int iMaxNr = numbers.Max();
m_labelResult.Text = String.Format("Maximum number of the selected numbers was {0}", iMaxNr);
}
else
{
m_labelResult.Text = "No numbers selected, select at least two numbers";
}
}
}
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainForm());
}
}
}
Feel free to ask any questions, I'll try to help - but as I said, nothing will prevent you from learning all the basics if you want to succed with software develpment.
Kind regards
Johannes