|
First as suggested previously you need a 5 long array of ints. The method described above (checking for uniqueness) won't work as (2,3,4,5,6) is unique but not winning.
You will also find your code improves vastly if you study OO and work out how to refactor. The two guidlines I try to live by [and often fail] are "Don't Repeat Yourself" "Keep It Simple Stupid" (DRY-KISS).
For example
int randomNumber1 = random.Next(1, 7);<br />
int randomNumber2 = random.Next(1, 7);<br />
int randomNumber3 = random.Next(1, 7);<br />
int randomNumber4 = random.Next(1, 7);<br />
int randomNumber5 = random.Next(1, 7);
Fails the DRY test.
I've separated out an example Yahtzee Roller class for you, this is one implementation of many possible and is not meant to be perfect. It contains an array of roll results, abd an array of winning values, these are compared. The amin program creates an instance of the roller, and proceeds to roll until a winning set is found.
The roller:
public class YahtzeeRoller
{
int[] rollResults = new int[]{0, 0, 0, 0, 0};
int[] WinningValues = new int[] { 1, 2, 3, 4, 5 };
Random random = new Random();
public bool IsWinning
{
get
{
return WinningValues.Except(rollResults).Count() == 0;
}
}
public string CurrentRoll
{
get
{
string result = "Roll =";
foreach (int rollResult in rollResults)
result += " " + rollResult;
return result;
}
}
public void Roll()
{
for (int i = 0; i < rollResults.Length; i++)
rollResults[i] = random.Next(1, 7);
}
}
Calling Program:
class Program
{
static void Main(string[] args)
{
YahtzeeRoller yahtzeeRoller = new YahtzeeRoller();
while (!yahtzeeRoller.IsWinning)
{
yahtzeeRoller.Roll();
Console.Write(yahtzeeRoller.CurrentRoll);
if (yahtzeeRoller.IsWinning)
Console.WriteLine(" Yahtzee!");
else
Console.WriteLine(" Not Yahtzee !");
}
Console.ReadKey();
}
}
Notice a few things. The re-factored code is shorter (and hopefully clearer) than the original. Additionally, it separates out the rolling functionality from the display [mostly] the use of CurrentRole property is debatable. You can now call Roll as many times as needed (it is not hard-coded), and if desired, easily change what constitutes a winning set of rolls.
I hope this helps!
CCC solved so far: 2 (including a Hard One!)
37!?!! - Randall, Clerks
|
|
|
|
|
Hi,
- you have a single random generator, that is good.
- you don't need five or ten Labels, its much easier to show all five numbers in a single Label.
- you want to recognize not only "12345" but also all permutations thereof. Sorting the numbers is one way, but is unnecessary. The smart way to do this is by using a bit collection. Have a look at this:
int all=0;
all = all | (1<<number);
...
if (all==goodValue) output("WON");
Now try to use that to your advantage; the end result will be less than half the code you have now.
BTW: please use PRE tags, not CODE tags.
|
|
|
|
|
But this isn't working at any computer?
|
|
|
|
|
dennis_max27 wrote: this
what?
dennis_max27 wrote: isn't working
what gives?
dennis_max27 wrote: any computer?
huh?
if you can't communicate what it is you want or try or experience, nobody can help you.
|
|
|
|
|
Ha! Use a System.Collections.Generic.HashSet!
Are you only looking for a large straight?
Clear the HashSet.
Generate the numbers (into an array).
Iterate the array, putting each value in the HashSet. (Or you could eliminate the array if you're only interested in large straights.)
Check how many values are in the HashSet -- if there are five and 1 or 6 is not present, then you have a large straight!
To also check for small straights, you can track the min and max values.
Large straight := Five values, max - min == 4
Small straight := Four values, max - min == 3
Also, if the HashSet contains only one value, you have a Yahtzee.
If only two, you might have a full house.
|
|
|
|
|
I have this problem with a SQL query that is executed through a c# program.
it occurs in the following query:
string strSql = "SELECT 2010Forms.Task_ID_PK, 2010Forms.isMainOutcome, 2010Forms.Outcome, ";
strSql += " 2010Outcome.InProg, 2010Forms.OutcomeType, ";
strSql += " 2010Outcome.TraineeStatus, 2010Outcome.ReviewerStatus ";
strSql += " FROM 2010Outcome INNER JOIN 2010Forms ON ";
strSql += " 2010Outcome.2010Outcome_ID_FK = 2010Forms.Task_ID_PK";
strSql += " where (2010Outcome.Review_ID_FK = '" + StringRevID "')";
strSql += " and (2010Outcome.Trainee_ID_FK = '" + StringTraineeID + "')";
strSql += " and (2010Forms.isFinal = 0)";
strSql += " order by 2010Forms.OutcomeOrder asc ";
I cannot see any missing operators, but is anyone can assist me, I will be very greatful.
|
|
|
|
|
Two things:
1) Shouldn't you have a space between ".Outcome" and "Order"?
AlucardCode wrote: strSql += " order by 2010Forms.OutcomeOrder asc ";
2) You realy should use Parameters.AddWithValue rather than encoding IDs directly. Even if they are numeric it is good practice - avoid SQl injection problems!
All those who believe in psycho kinesis, raise my hand.
|
|
|
|
|
Maybe using table names starting with a number can be a problem: identifiers starting with a number has a special meaning in SQL server (documentation here[^]).
Try enclosing the identifiers inside square brakets (eg [2010Outcome].InProg ). I'm not sure this is your problem through.
|
|
|
|
|
Cool Thanx, I will give it a try
|
|
|
|
|
missing plus sign
strSql += " where (2010Outcome.Review_ID_FK = '" + StringRevID "')";
strSql += " where (2010Outcome.Review_ID_FK = '" + StringRevID + "')";
|
|
|
|
|
when can we use begin invoke
suresh
|
|
|
|
|
|
sureshhi wrote: when can we use begin invoke
Any time you like!
|
|
|
|
|
Hi
I have a program that needs Microsoft Sql Server for my database .
Now i want to create an installer for my program with Installshield Software and i want to know what should i add to my installer for using sql database?
|
|
|
|
|
SQL Server, SQL Express or MSDE? I assume that you're referring to the free version, SQL Express. There's no merge-module anymore, but an executable that you can run from your own setup;MSDN states: SQL Server Express no longer uses merge modules to embed the SQL Server Express Database Engine. Instead, it contains a single-setup executable that can be bundled with your custom application. This executable accepts command-line parameters for a smooth installation experience.
More information can be obtained here[^].
Good luck
I are Troll
|
|
|
|
|
The best thing is to have them separately. Your setup will be fairly large if you can try to add it to your setup. Install SQL separately.
Vuyiswa Maseko,
Spoted in Daniweb-- Sorry to rant. I hate websites. They are just wierd. They don't behave like normal code.
C#/VB.NET/ASP.NET/SQL7/2000/2005/2008
http://www.vuyiswamaseko.com
vuyiswa@its.co.za
http://www.itsabacus.co.za/itsabacus/
|
|
|
|
|
Just put a statement in the documentation that they need to have some version of SQL Server available somewhere on there network. That's the best you can do. Likewise for .net or any other product that you didn't write.
|
|
|
|
|
If we have many unused namespaces in a class, does it affect performance in any way?
|
|
|
|
|
In visual studio you can:
Main Menu - On the Edit menu, point to IntelliSense, point to Organize Usings, and then click Remove Unused Usings.
Context Menu - Right-click anywhere inside the code editor, point to Organize Usings, and then click Remove Unused Usings.
My feeling is that, it will be removed during compilation time (JIT) so the performance will be impacted during the load of the file, evaluation of it. But not during the runtime.
|
|
|
|
|
|
jdkulkarni wrote: if you add extra unused references then yes
They may affect compile time, but not run time.
|
|
|
|
|
Only during the compile phase when the compiler builds its internal reference tables. The final object code should not be affected.
|
|
|
|
|
That question makes no sense.
0) Namespaces aren't in classes.
1) If it's unused, it's not in the class.
|
|
|
|
|
Hi guys...
I have an issue with my xml file... actually im developing a console application which inserts the data from an Xml file
into my database... This happens with
certain verifications done within the console application, like
checking whether the application id given by the user matches with the application id present in the xml file and also whether that application
has certain permissions, like certain applications hav certain
previleges, sumthing like dat...
Accordingly the insertion of datas into the database takes place... the code is as follows:
class Class1
{
public string app;
public void perform()
{
OdbcConnection con= new OdbcConnection();
ADIBCrypto.Encryption64 crpto = new ADIBCrypto.Encryption64();
try
{
string connString = crpto.GetCnnStr(ConfigurationSettings.AppSettings["appname"],ConfigurationSettings.AppSettings["dsnSybase"]);
con.ConnectionString = connString;
con.Open();
Console.WriteLine("Connection Opened Successfully");
Console.WriteLine("Enter the application");
app=Console.ReadLine();
XmlDataDocument doc = new XmlDataDocument();
doc.Load(ConfigurationSettings.AppSettings["app"]);
XmlNodeList nodes = doc.GetElementsByTagName("Row");
foreach(XmlNode node in nodes)
{
if(node.HasChildNodes && node.ChildNodes.Count > 0)
{
string a_ID = node.ChildNodes[0].InnerText;
string a_ApplicationDescription = node.ChildNodes[1].InnerText;
string a_Category = node.ChildNodes[2].InnerText;
string a_Business_Owner = node.ChildNodes[3].InnerText;
string a_CreatedID = node.ChildNodes[4].InnerText;
string a_CreatedTimeStamp = node.ChildNodes[5].InnerText;
string a_Status = node.ChildNodes[6].InnerText;
if(a_ID==app)
{
Console.WriteLine("App Inserted");
}
}
}
XmlDataDocument doc1 = new XmlDataDocument();
doc1.Load(ConfigurationSettings.AppSettings["fun"]);
XmlNodeList nodes1 = doc1.GetElementsByTagName("Row");
foreach(XmlNode node1 in nodes1)
{
if(node1.HasChildNodes && node1.ChildNodes.Count > 0)
{
string f_ID = node1.ChildNodes[0].InnerText;
string f_FunctionDescription = node1.ChildNodes[1].InnerText;
string f_AppId = node1.ChildNodes[2].InnerText;
string f_FileName = node1.ChildNodes[3].InnerText;
if(f_AppId==app)
{
Console.WriteLine("fun--{0}",f_FileName);
XmlDataDocument doc2 = new XmlDataDocument();
doc2.Load(ConfigurationSettings.AppSettings["funfile"]+"\\"+f_FileName+".xml");
XmlNodeList nodes2 = doc2.GetElementsByTagName("Function");
foreach(XmlNode node2 in nodes2)
{
if(node2.HasChildNodes && node2.ChildNodes.Count > 0)
{
string ff_Id = node2.ChildNodes[0].InnerText;
string ff_FunctionDescription = node2.ChildNodes[1].InnerText;
string ff_Url = node2.ChildNodes[2].InnerText;
string ff_AppId = node2.ChildNodes[3].InnerText;
string ff_Type = node2.ChildNodes[4].InnerText;
string ff_MenuCommand = node2.ChildNodes[5].InnerText;
string ff_Status = node2.ChildNodes[6].InnerText;
Console.WriteLine("funfile--{0}",ff_Id);
}
}
}
}
}
Console.WriteLine("Function Inserted");
XmlDataDocument doc3 = new XmlDataDocument();
doc3.Load(ConfigurationSettings.AppSettings["fungrp"]);
XmlNodeList nodes3 = doc3.GetElementsByTagName("Row");
foreach(XmlNode node3 in nodes3)
{
if(node3.HasChildNodes && node3.ChildNodes.Count > 0)
{
string fg_GroupId = node3.ChildNodes[0].InnerText;
string fg_AppId = node3.ChildNodes[1].InnerText;
string fg_FuncId = node3.ChildNodes[2].InnerText;
string fg_FileName = node3.ChildNodes[3].InnerText;
if(fg_AppId==app)
{
XmlDataDocument doc4 = new XmlDataDocument();
doc4.Load(ConfigurationSettings.AppSettings["fungrpfile"]+"\\"+fg_FileName+".xml");
XmlNodeList nodes4 = doc4.GetElementsByTagName("FunctionGroup");
foreach(XmlNode node4 in nodes4)
{
if(node4.HasChildNodes && node4.ChildNodes.Count > 0)
{
string fgf_GroupId = node4.ChildNodes[0].InnerText;
string fgf_AppId = node4.ChildNodes[1].InnerText;
string fgf_FuncId = node4.ChildNodes[2].InnerText;
string fgf_Status = node4.ChildNodes[3].InnerText;
Console.WriteLine("fungrp--{0}",fgf_FuncId);
XmlDataDocument doc5 = new XmlDataDocument();
doc5.Load(ConfigurationSettings.AppSettings["grp"]);
XmlNodeList nodes5 = doc5.GetElementsByTagName("Row");
foreach(XmlNode node5 in nodes5)
{
if(node5.HasChildNodes && node5.ChildNodes.Count > 0)
{
string g_Id = node5.ChildNodes[0].InnerText;
string g_Description = node5.ChildNodes[1].InnerText;
string g_FileName = node5.ChildNodes[2].InnerText;
if(fgf_GroupId==g_Id)
{
XmlDataDocument doc6 = new XmlDataDocument();
doc6.Load(ConfigurationSettings.AppSettings["grpfile"]+"\\"+g_FileName+".xml");
XmlNodeList nodes6 = doc6.GetElementsByTagName("Group");
foreach(XmlNode node6 in nodes6)
{
if(node6.HasChildNodes && node6.ChildNodes.Count > 0)
{
string gf_Id = node6.ChildNodes[0].InnerText;
string gf_Description = node6.ChildNodes[1].InnerText;
string gf_Type = node6.ChildNodes[2].InnerText;
string gf_Level = node6.ChildNodes[3].InnerText;
int gf_DailyLimit = Convert.ToInt32(node6.ChildNodes[4].InnerText);
string gf_Status = node6.ChildNodes[5].InnerText;
Console.WriteLine("grp--{0}",gf_Id);
}
}
}
}
}
}
}
}
}
}
con.Close();
Console.WriteLine("Connection Closed");
Console.ReadLine();
}
catch(OdbcException)
{
Console.WriteLine("Record already exists");
Console.ReadLine();
}
}
The problem is that on loading the "doc3" the tags in the xml file are not in the same order.. The Xml file is as follows:
<Row>
<AppId>CAPRC</AppId>
<GroupId>CAPRC02</GroupId>
<FuncId>cap63</FuncId>
<FileName>FG_53</FileName>
</Row>
<Row>
<GroupId>ICCBranch</GroupId>
<AppId>ICC</AppId>
<FuncId>00001</FuncId>
<FileName>FG_54</FileName>
</Row>
<Row>
<GroupId>ICCBranch</GroupId>
<AppId>ICC</AppId>
<FuncId>00002</FuncId>
<FileName>FG_55</FileName>
</Row>
<Row>
<AppId>ICC</AppId>
<GroupId>ICCCardCen</GroupId>
<FuncId>00003</FuncId>
<FileName>FG_56</FileName>
</Row>
so u can see that the AppID and the GroupId tags are not in the right order.. in certain rows the tag-appid is in childnode[0]
and in certain rows the tag
is in Childnode[1]... so my check in the application is not
performed properly.. instead of childnode index number can i make it check with the name of the tag...
please guide i am 95% done with my application and at the final stage i found out this bug ... please guide me with
any better ideas...
Thanxx in advance...
Regards,
Tash
modified on Thursday, December 10, 2009 3:44 AM
|
|
|
|
|
Replace
foreach(XmlNode node in nodes)
{
if(node.HasChildNodes && node.ChildNodes.Count > 0)
{
string a_ID = node.ChildNodes[0].InnerText;
string a_ApplicationDescription = node.ChildNodes[1].InnerText;
string a_Category = node.ChildNodes[2].InnerText;
string a_Business_Owner = node.ChildNodes[3].InnerText;
string a_CreatedID = node.ChildNodes[4].InnerText;
string a_CreatedTimeStamp = node.ChildNodes[5].InnerText;
string a_Status = node.ChildNodes[6].InnerText;
if(a_ID==app)
{
Console.WriteLine("App Inserted");
}
}
} ;
With something like this:
foreach(XmlNode node in nodes)
{
if(node.HasChildNodes)
{
string a_ID = string.Empty;
string ...
...
IEnumerator nodeEnumerator = node.GetEnumerator();
while (nodeEnumerator.MoveNext())
{
XmlNode currentChildNode = (XmlNode)nodeEnumerator.Current;
if (currentChildNode.NodeType != XmlNodeType.Element)
continue;
switch (currentChildNode.Name)
{
case "AppId": a_ID = currentChildNode.InnerText; break;
case "GroupId": ...
...
}
}
}
} ;
Greetings
Covean
|
|
|
|