C# if-else语句和while循环

C# if-else语句和while循环,c#,.net,if-statement,c#-3.0,while-loop,C#,.net,If Statement,C# 3.0,While Loop,请看一下下面的代码 namespace Funny { class QuesionsAndAnswers { private double firstNumber; private double secondNumber; private double userAnswer; private double computerAnswer; private string operators;

请看一下下面的代码

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;
        }
    }
}
名称空间
{
课堂提问和答案
{
私人双第一号码;
私人双倍号码;
私人双用户应答;
私人双机应答;
私有字符串运算符;
私人布尔回答正确;
私人布尔使能双;
私人双[]号码列表;
私有字符串[]listOfOperators;
私有随机发生器;
私人静态问答;
私人问题和答案()
{
随机发生器=新随机();
listOfNumbers=新的双[]{1,2,3,4,5,6,7,8,9};
listOfOperators=新字符串[]{“+”,“-”,“*”,“/”};
}
公共静态问题和答案获取问题和答案立场()
{
如果(qa==null)
qa=新问题和答案();
返回qa;
}
公共字符串generateQuestions()
{
字符串结果=”;
operators=listOfOperators[randomizer.Next(listOfOperators.Length)];
firstNumber=ListOfNumber[randomizer.Next(ListOfNumber.Length)];
secondNumber=ListOfNumber[randomizer.Next(ListOfNumber.Length)];
if((运算符.Equals(“/”)&&(enableDouble==false))
{
while(firstNumber%secondNumber==0)
{
firstNumber=ListOfNumber[randomizer.Next(ListOfNumber.Length)];
}
结果=第一个数字+运算符+第二个数字;
}
else if(运算符。等于(“-”&&(第一个数字第二个数字)
{
firstNumber=ListOfNumber[randomizer.Next(ListOfNumber.Length)];
secondNumber=ListOfNumber[randomizer.Next(ListOfNumber.Length)];
}
结果=第一个数字+运算符+第二个数字;
}
返回结果;
}
公共无效设置双重应答(布尔检查)
{
enableDouble=检查;
}
}
}
在这里,在generateQuestions()方法中,我试图生成一些数学问题

如果运算符在“-”中,并且第一个数字<第二个数字,则应重新生成数字(第一个数字和第二个数字),以确保答案不是负值

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

在我的尝试中,以上两种情况都没有发生。它仍然会产生意外的答案,有时甚至什么都没有。为什么会这样?请帮助


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

您的
语句中有错误的条件,而
语句中应该有完全相反的条件。此外,如果所有条件都不匹配,您也不会为结果赋值,因此
result=firstNumber+operators+secondNumber;
行应该是m已从条件语句中删除(或仅替换为简单返回):

。。。
if((运算符.Equals(“/”)&&(enableDouble==false))
{
而(firstNumber%secondNumber!=0)//
应该是

while (firstNumber % secondNumber != 0)
只要您提供的条件为
true
,则
while
循环将继续执行。因为您希望firstNumber%secondNumber等于0;只要
firstNumber%secondNumber!=0,就应该循环并生成新值

我相信减法循环也有同样的问题

最后(与您的问题无关)您可以使用
=
来比较C#中的字符串


嗯,它有时不返回任何内容,因为除了要捕获的边缘情况之外,您从未将
结果设置为
以外的任何内容

你的
while
语句都是错误的。应该是:

while ((firstNumber % secondNumber) != 0)
:
while (firstNumber < secondNumber)
你有
a=21,b=7
,它保证给出一个整数乘法器,并给出等式
“21/7”


因此,这(psuedo代码)是我首先要做的:

# 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
#获取随机值。
op=随机_,从(“+-/*”)
n1=来自(“123456789”)的随机_
n2=来自(“123456789”)的随机变量
#对于减法,请确保n1>=n2。
如果op=“-”和n1
在这两种情况下,虽然您的条件是错误的,但您需要将其更改为

while (firstNumber % secondNumber != 0) 

while(firstNumber
以下是我从您的问题中了解到的解决方案

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;
            }
if((operators.Equals(“/”)&&(enableDouble==false))
{
while(firstNumber%secondNumber!=0)
{
firstNumber=ListOfNumber[randomizer.Next(ListOfNumber.Length)];
}
结果=第一个数字+运算符+第二个数字;
}
else if(运算符。等于(“-”&&(firstNumber
  • 通过制作两个不同的测试项目来实现测试用例
  • 使用包含这些测试用例的MSVS单元测试项目报告
  • 在第一种情况下报告测试覆盖率,考虑MCDC,在第二种情况下报告总体覆盖率,并对发现不同覆盖率指标的原因进行评论
  • 对于下面的代码

        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;
            }
        }
        }
    
    名称空间
    {
    课堂提问和答案
    {
    私人双第一号码;
    私人双倍号码;
    私人双用户应答;
    私人双机应答;
    私有字符串运算符;
    私人布尔回答正确;
    私有布尔使能
    
    # 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
    
    while (firstNumber % secondNumber != 0) 
    
    while (firstNumber < secondNumber)
    
    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;
                }
    
        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;
            }
        }
        }