使用&lt ;,< =,> =运算符时获取太多输出

时间:2018-02-12 01:40:43

标签: c#

我一直致力于鱼类日托计划。这个想法是客户输入他们的信息(名称,鱼类名称,鱼类和鱼的长度,以英寸为单位),并根据他们输入的英寸数,最后返回他们的信息和费用。我把它全部写出来并且它做了我想要的东西,除非它得到的费用它输出的比它应该的多。

例如:如果用户将其鱼的长度输入为21,而不是输出“费用:16 $”,则输出“费用:12 $”和“费用:16 $”。

我知道这与我如何设置我的操作符(<,>,< =,> =)有关,这就是为什么它输出的比我想要的多,我只是不能把我的手指如何解决它。

以下是代码:

namespace Fish_O_Rama
{
    class Program
    {
        static void Main(string[] args)
        {
            //Declaring constants for fish sizes
            const int FishSizeSmall = 9;
            const int FishSizeMed1 = 10;
            const int FishSizeMed2 = 20;
            const int FishSizeBig1 = 21;
            const int FishSizeBig2 = 30;
            const int FishSizeBiggest = 31;

            //Declaring constants for the fees
            const string FishMonSmall = ("Fee: 7$");
            const string FishMonMed = ("Fee: 12$");
            const string FishMonBig = ("Fee: 16$");
            const string FishMonBiggest = ("Fee: 20$");

            //Accepting input from the customer
            Console.Write("Please enter your name: ");
            string CustName = Console.ReadLine();
            Console.Write("Please enter your fishes name: ");
            string FishName = Console.ReadLine();
            Console.Write("Please enter your fishes species: ");
            string FishSpecies = Console.ReadLine();
            Console.Write("Please enter the length of your fish in inches: ");
            string FishLength = Console.ReadLine();

            //Outputting the users input
            Console.WriteLine("--------------------------");
            Console.WriteLine("Name: " + CustName);
            Console.WriteLine("Fishes Name: " + FishName);
            Console.WriteLine("Species: " + FishSpecies);

            //Fish under 10 inches
            if (Convert.ToInt32(FishLength) < FishSizeSmall)
            {
                Console.WriteLine();
                Console.WriteLine(FishMonSmall); 
            }

            //Fish 10 inches to 20 inches
            if (Convert.ToInt32(FishLength) >= FishSizeMed1 || Convert.ToInt32(FishLength) <= FishSizeMed2)
            {
                Console.WriteLine();
                Console.WriteLine(FishMonMed);
            }

            //Fish greater than 20 inches but up to 30 inches
            if (Convert.ToInt32(FishLength) >= FishSizeBig1 || Convert.ToInt32(FishLength) <= FishSizeBig2)
            {
                Console.WriteLine();
                Console.WriteLine(FishMonBig);
            }

            //Fish greater than 30 inches
            if (Convert.ToInt32(FishLength) > FishSizeBiggest)
            {
                Console.WriteLine();
                Console.WriteLine(FishMonBiggest);
            }

        }
    }
}

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:0)

原来我正在使用逻辑或语句“||”我本来应该使用逻辑和陈述“&amp;&amp;”。

像这样:

//Fish 10 inches to 20 inches
        if (Convert.ToInt32(FishLength) >= FishSizeMed1 && Convert.ToInt32(FishLength) <= FishSizeMed2)
        {
            Console.WriteLine();
            Console.WriteLine(FishMonMed);
        }

感谢古斯曼。

答案 1 :(得分:0)

由于Fish只能有1个长度,因此使用“if / else if”语句而不是一系列“if”语句可能是有意义的。这样,当“if / else if”中的条件评估为true时,它将短路,而不是在识别出正确的案例后潜在地测试其他不必要的情况。在长度为21的情况下,

if (Convert.ToInt32(FishLength) >= FishSizeMed1 || Convert.ToInt32(FishLength) <= FishSizeMed2)

评估为true,因为您使用的是||而不是&&。我相信您正在尝试确定长度是否在两个值之间,并且不大于或等于最小值小于或等于最大值。由于21大于10,FishSizeMed1的值,||之后的条件甚至不需要检查。这是因为true || truetrue || false评估为true

下一个if

if (Convert.ToInt32(FishLength) >= FishSizeBig1 || Convert.ToInt32(FishLength) <= FishSizeBig2)
由于与上述相同的原因,

也评估为true:10大于或等于21,即FishSizeBig1的值。

理解两个AND和OR布尔表达式之间的区别将解决这个问题,并使用“if / else if”语句进行链接将使应用程序更有效。