Please have a look at the following code
namespace Funny
{
class QuesionsAndAnswers
{
private double firstNumber;
private double secondNumber;
private double userAnswer;
private double computerAnswer;
private string operators;
private bool answerCorrect;
private bool enableDouble;
private double[] listOfNumbers;
private string[] listOfOperators;
private Random randomizer;
private static QuesionsAndAnswers qa;
private QuesionsAndAnswers()
{
randomizer = new Random();
listOfNumbers = new double[] { 1,2,3,4,5,6,7,8,9 };
listOfOperators = new string[] { "+", "-", "*", "/" };
}
public static QuesionsAndAnswers getQuesionsandAnswersInstance()
{
if (qa == null)
qa = new QuesionsAndAnswers();
return qa;
}
public string generateQuestions()
{
string result = "";
operators = listOfOperators[randomizer.Next(listOfOperators.Length)];
firstNumber = listOfNumbers[randomizer.Next(listOfNumbers.Length)];
secondNumber = listOfNumbers[randomizer.Next(listOfNumbers.Length)];
if ((operators.Equals("/")) && (enableDouble == false))
{
while (firstNumber % secondNumber == 0)
{
firstNumber = listOfNumbers[randomizer.Next(listOfNumbers.Length)];
}
result = firstNumber + operators + secondNumber;
}
else if (operators.Equals("-") && (firstNumber<secondNumber))
{
while (firstNumber > secondNumber)
{
firstNumber = listOfNumbers[randomizer.Next(listOfNumbers.Length)];
secondNumber = listOfNumbers[randomizer.Next(listOfNumbers.Length)];
}
result = firstNumber + operators + secondNumber;
}
return result;
}
public void setDoubleAnswers(bool check)
{
enableDouble = check;
}
}
}
In here, in the generateQuestions() method, I am trying to generate some math questions.
If operator in “-” and if the firstNumber < secondNumber, then should re generate numbers (first number and second number) to make sure the answer is not a minus value.
And, if the operator is “/” and the boolean value is false, it should regenerate numbers again to make sure the the answer (which means the calculation, for an example 2/1 = 2) doesn’t contain any floating points (which means it should not generate questions like 2/3, because the answer contains floating points).
In my attempt, both above are not happening. It still generates unexpected answers or, sometimes nothing. Why is that? Please help
Please note, I am a Java developer and this is my first major C# project.
Well, it returns nothing sometimes because, other than the edge cases you’re catching, you never set
resultto anything other than"".And both your
whilestatements are the wrong way around. It should be:However, for efficiency, I wouldn’t do that second
whilesince you may get a long run of pairs where that property holds. If the numbers are the wrong way around, just swap them.And there’s precious few cases where the remainder will be zero from your number selection (
9/3,8/4,8/2,6/3,6/2,4/2,M/MandN/1is (I think) the exhaustive list). If you want a more expanded set of equations, I would go the other way and choose two numbers to mutiply, then swap the first with the result.For example, given the two numbers
a = 3andb = 7, simply do:and you have
a = 21, b = 7which is guaranteed to give an integral multiplier and deliver the equation"21 / 7".So this (psuedo-code) is what I would start with: