if else语句和while循环

Pea*_*Gen 2 .net c# if-statement while-loop c#-3.0

请查看以下代码

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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在这里,在generateQuestions()方法中,我试图生成一些数学问题.

如果运算符在" - "和firstNumber <secondNumber,那么应该重新生成数字(第一个数字和第二个数字)以确保答案不是负值.

并且,如果运算符是"/"并且布尔值为false,则它应该再次重新生成数字以确保答案(这意味着计算,例如2/1 = 2)不包含任何浮点数(这意味着它不应该生成像2/3这样的问题,因为答案包含浮点数).

在我的尝试中,上述两点都没有发生.它仍会产生意想不到的答案,有时甚至没有.这是为什么?请帮忙

请注意,我是一名Java开发人员,这是我的第一个主要C#项目.

pax*_*blo 6

好吧,它有时没有返回任何东西,因为除了你捕获的边缘情况之外,你永远不会设置result除了之外的任何东西"".

你的while陈述都是错误的.它应该是:

while ((firstNumber % secondNumber) != 0)
:
while (firstNumber < secondNumber)
Run Code Online (Sandbox Code Playgroud)

但是,为了提高效率,我不会这样做,while因为你可能会获得该属性所持有的长对子.如果数字是错误的方式,只需交换它们.

还有的珍贵稀少的情况下,其余的将是零,从你的电话号码选择(9/3,8/4,8/2,6/3,6/2,4/2,M/MN/1是(我认为)详尽的清单).如果你想要一组更加扩展的方程式,我会采用另一种方式选择两个数字来进行多重处理,然后将第一个数字与结果交换.

例如,给定两个数字a = 3b = 7,简单地做:

a = a * b;
Run Code Online (Sandbox Code Playgroud)

并且你有a = 21, b = 7保证给出一个整数乘数并提供方程式"21 / 7".


所以这个(伪代码)就是我要开始的:

# Get the random values.

op = random_from ("+-/*")
n1 = random_from ("123456789")
n2 = random_from ("123456789")

# For subtraction, make sure n1 >= n2.

if op = "-" and n1 < n2:
    tmp = n1;
    n1 = n2;
    n2 = tmp;

# For division, make sure n1 is integral multiplier of n2.

if op = "/":
    n1 = n1 * n2

# Return expression in ALL cases.

return n1 + op + n2
Run Code Online (Sandbox Code Playgroud)