使用整数和字符串的布尔逻辑

Boolean logic using integers and strings

提问人:Codi 提问时间:4/22/2022 最后编辑:Lee TaylorCodi 更新时间:4/22/2022 访问量:138

问:

如果申请人符合所有标准,我希望它回答“真”,如果申请人不符合标准,我希望它回答“假”。这是我在 VS 中的内容:

namespace Boolean_Logic
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("What is your age?");
            string yourAge = Console.ReadLine();
            Console.WriteLine("Have you ever had a DUI? Answer with true or false");
            string yourDuis = Console.ReadLine();
            Console.WriteLine("How many speeding tickets do you have?");
            string yourTickets = Console.ReadLine();
            Console.ReadLine();

            int applicantAge = 18;
            bool applicantDui = false;
            int applicantTickets = 3;

            bool isQualified = (applicantAge >= 18 && !applicantDui && applicantTickets <= 3);
            Console.WriteLine(isQualified);
            Console.ReadLine();


        }
    }
}
C# 控制台应用程序 布尔逻辑

评论

0赞 Serg 4/22/2022
看起来您需要在计算 .现在,您总是检查哪个是恒定的。yourDuisisQualifiedapplicantDui
0赞 Lee Taylor 4/22/2022
@Codi 了解如何使用 VS 的调试工具,特别是了解如何单步执行代码。然后,您可以检查您拥有的各种变量中的值,并更清楚地看到您的错误。
1赞 Codi 4/22/2022
@LeeTaylor我现在使用的是 VS,直到昨天,我只将 VSC 用于 HTML 和 CSS。目前正在尝试学习调试工具以及什么不是,很好的建议和响应!

答:

0赞 pm100 4/22/2022 #1

您需要将读取的字符串转换为适当的类型。

   Console.WriteLine("What is your age?");
   string yourAgeStr = Console.ReadLine();
   int applicantAge = Int32.Parse(yourAgeStr);

对于布尔值 你可能想要

   string yourDuisStr = Console.ReadLine();
   bool applicantDui = yourDuisStr == "Y" || yourDuisStr == "y";

  

门票也一样

请注意,如果您为年龄提示输入非数字信息,您将感到格外兴奋。看看你是否能想出如何解决这个问题(有 2 种主要方法或这样做,看看你是否能解决它们)

编辑 - 我注意到您提示用户回答“true”或“false”(一个非常奇怪的 UI )

所以这是必要的

 bool applicantDui = yourDuisStr == "true";

 bool applicantDui  = bool.Parse(youDuiStr);

评论

0赞 pm100 4/22/2022
@NigelBess - a) 使用 TryParse b) 捕获异常 c) 菜鸟不需要知道的奇怪东西
0赞 pm100 4/22/2022
@NigelBess - 将文本更改为“主要方式”
0赞 Codi 4/22/2022
我昨天开始学习 c#,这是我的第一门编程语言,所以我仍然有点困惑,哈哈,但我正在尝试这个建议,感谢您的回复!
0赞 pm100 4/22/2022
@Codi - 祝你好运,在 SO 答案中,我尝试只是给出提示,这样你就可以在学习过程中学习。了解所有优质资源的位置。我发现谷歌搜索“c# int32.pparse”或“c# convert string to boolean”是一种神圣的开始方式
1赞 Nigel 4/22/2022 #2

您需要解析字符串。使用 int。TryParsebool。尝试解析

    static void Main(string[] args)
    {
        Console.WriteLine("What is your age?");
        string yourAgeResponse = Console.ReadLine();
        if (!int.TryParse(yourAgeResponse, out var yourAge))
        {
            Console.WriteLine($"{yourAgeResponse} is not a valid age (must be an integer)");
            return;
        }

        //do the same type of thing for the other parameters.
    }

对你有很大帮助的事情(不仅从设计的角度来看,而且因为它可以防止这种问题)是在构建块中构建你的代码,而不是将所有内容都转储到 main 中。问问自己代码在做什么,并将其分解为多个步骤:

  1. 从用户那里获取年龄
  2. 了解用户是否曾经有过酒驾
  3. 从用户处获取超速罚单的数量
  4. 检查用户是否合格
  5. 告诉用户他们是否合格。

对于其中每个步骤,编写一个方法签名。让我们从第 1 步开始:我们需要一个整数(用户的年龄),并且没有参数:

int GetAgeFromUser()

如果我们对所有步骤都这样做,我们会得到如下结果:

  1. int GetAgeFromUser()
  2. bool HasUserHadDuis()
  3. int GetSpeedingTicketsFromUser()
  4. bool IsUserQualified(int age, bool hasDuis, int speedingTickets)
  5. void TellUserIfTheyAreQualified(bool isQualified)

您的 Main 方法变得更加可读和易于理解:

   static void Main(string[] args)
    {
        int age = GetAgeFromUser();
        bool hasDuis = HasUserHadDuis();
        int speedingTickets = GetSpeedingTicketsFromUser();

        bool isQualified = IsUserQualified(age, hasDuis, speedingTickets);
        TellUserIfTheyAreQualified(isQualified);
    }

除了可读性之外,这还有许多其他好处:

  • 你的一个大问题已经分解成多个小问题

  • 您创建的每个方法都是可重用的。(如果您需要再次询问一些信息,则无需重写相同的代码即可完成)

  • 现在,您的所有数据类型都保证正确无误

最后一点是与您当前问题的相关部分。现在,您已经定义了 IsUserQualified 的签名,您知道参数将始终是预期类型。

最后要做的是编写每个方法。因为你会想做这样的事情:GetAgeFromUser

    static int GetAgeFromUser()
    {
          int age;
        while (!TryGetAgeFromUser(out age))
        {
            Console.WriteLine("Invalid age! age must be an integer.");
        }

        return age;

        
        static bool TryGetAgeFromUser(out int age)
        {
            Console.WriteLine("What is your age?");
            string response = Console.ReadLine();
            return int.TryParse(response, out age);
        }
    }

至少我会这样做。上面的代码可能有点超出你的脑海,但没关系。你可以用自己的方式写,也可以通过尝试理解我写的内容来学习

评论

0赞 Nigel 4/22/2022
@MickyD 我已经更新了答案以提供更多适合初学者的信息
0赞 Codi 4/22/2022
谢谢,我会尝试其中的一些
0赞 4/22/2022
“我已经更新了答案,以提供更多适合初学者的信息” - 太好了!谢谢你。+1 :)
-1赞 Codi 4/22/2022 #3

感谢大家的帮助!我能够想出一些办法让它工作。对我有用的代码是:

    using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Boolean_Logic
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("What is your age?");
            int yourAge = Convert.ToInt32(Console.ReadLine());
            Console.ReadLine();
            Console.WriteLine("Have you ever had a DUI? Please answer true/false.");
            bool yourDuis = Convert.ToBoolean(Console.ReadLine());
            Console.WriteLine("How many speeding tickets do you have?");
            int yourTickets = Convert.ToInt32(Console.ReadLine());
            Console.ReadLine();


            bool isQualified = (yourAge >= 18 && !yourDuis && yourTickets <= 3);
            Console.WriteLine(isQualified);
            Console.ReadLine();



        }
    }
    }

评论

1赞 4/22/2022
“感谢大家的帮助!我能够想出一些办法让它工作。对我有用的代码是:“ - SO 不是一个论坛。只需点赞并接受此页面上对您最有帮助的答案。