【问题标题】:Simple c# exercise for beginners. I'm stuck适合初学者的简单 C# 练习。我被困住了
【发布时间】:2015-04-01 18:02:40
【问题描述】:

我正在用 c# 做一个练习来练习,但我不清楚我应该做什么以及如何做事。 (我还没有考虑作为编译器):( .

练习是这样设置的。

  • 我们有两个孩子,a 和 b,以及参数 aSmile 和 bSmile 表明每个人是否都在微笑。
  • 如果他们都在微笑,或者他们都没有微笑,我们就有麻烦了 微笑。
  • 如果我们遇到麻烦,则返回 true。
  • AreWeInTrouble(true, true) -> true
  • AreWeInTrouble(false, false) -> 是的
  • AreWeInTrouble(true, false) -> false

public bool AreWeInTrouble(bool aSmile, bool bSmile) {}

到目前为止我的代码:

public bool AreWeInTrouble(bool aSmile, bool bSmile)
    {

        if (aSmile == true && bSmile == true)
        {
            return true;
        }
        else if (aSmile == false && bSmile == false)
        {
            return true;
        }
        else
            return false;

    }

我已将此方法放在 Program.cs 中的 main 方法中,因此一旦程序启动,该方法就会被调用。

static void Main(string[] args)
    {
        AreWeInTrouble(aSmile, bSmile);
    }

但是当我调用这个方法时,我得到一个错误,即当前内容中不存在 a 和 b 微笑。

所以我想问一下是否有人可以给我一些提示/技巧来解决这个练习。 我不确定如何从这里开始,但我想了解缺少的内容并重试。

谢谢大家的帮助!

【问题讨论】:

  • 此时,aSmilebSmile 是方法的参数,该方法需要传入一些变量...
  • 与您的问题无关,但作为提示,您也不需要“== true”。 aSmile 和 bSmile 已经是布尔值,所以你可以只做 "if (aSmile && bSmile)" 和 "if (!aSmile && !bSmile)"
  • 另外,我认为你应该看看你的布尔代数课程:en.wikipedia.org/wiki/Exclusive_or Just return !(aSmile ^ bSmile);
  • 虽然!(aSmile ^ bSmile)在逻辑上是正确的,但aSmile == bSmileAreWeInTrouble的最佳实现。
  • 关于methods(尤其是方法参数与参数)的 MSDN 条目可能很有趣。 -- "方法定义指定了所需的任何参数的名称和类型。当调用代码调用方法时,它为每个参数提供称为参数的具体值。"

标签: c#


【解决方案1】:

您应该传入一些值,因为 aSmilebSmile 在该方法中不是已知变量。

来自示例:

 AreWeInTrouble(true, false);

其次,你应该捕获返回值:

 bool result = AreWeInTrouble(true, false);

并可能显示它:

 bool result = AreWeInTrouble(true, false);
 Console.WriteLine("Are we in trouble? {0}", result);

另外,将您的方法设为static,因为Main 方法是:

public static bool AreWeInTrouble(bool aSmile, bool bSmile)
{ }

【讨论】:

  • 非常感谢!! AreWeInTrouble(真,假);以前是红色下划线的(在我将静态添加到方法之前)。任何进入静态 void main 的方法也需要是静态的?我还没有学会在方法中使用 static 关键字。我去看看,再次感谢。
【解决方案2】:

试试这个:

static void Main(string[] args) {
    Console.WriteLine(AreWeInTrouble(true, true));   // In trouble
    Console.WriteLine(AreWeInTrouble(false, false)); // In trouble
    Console.WriteLine(AreWeInTrouble(true, false));  // Not in trouble

    Console.ReadLine(true);
}

static bool AreWeInTrouble(bool aSmile, bool bSmile) {
    // If aSmile matches bSmile then we are in trouble.
    return aSmile == bSmile;
}

【讨论】:

  • 我说return !(aSmile ^ bSmile);,但我没有看到相等测试。被铆接了!
【解决方案3】:

AreWeInTrouble 方法看起来不错(但作为提示:看看异或运算符,XOR)。

main 方法中的调用引用了变量,这些变量没有定义在Main 方法的范围内。

public static void Main()
{
    AreWeInTrouble(aSmile, bSmile); // <--- aSmile, bSmile are not defined
}

您可以使用布尔常量 truefalse 调用该方法,或者您需要在 main 方法的范围内定义变量:

public static void Main()
{
    bool aSmile = true;
    bool bSmile = false;
    AreWeInTrouble(aSmile, bSmile); // returns false
    AreWeInTrouble(aSmile, true); // returns true
}

当然,AreWeInTrouble方法必须声明为static,因为Main方法是静态的,因此没有实例就无法访问类的实例方法。

【讨论】:

    【解决方案4】:

    我给你的建议是为这个方法创建一个单元测试,这样你就可以输入你想要的输入和预期的返回值。这将使您成为更复杂场景的更好编码器。 link

    关于布尔求解,跟我一起想想你想要这样的东西:

    bool areBothSmilling = aSmile && bSmile; // Booleans don`t need ==, the == will return a boolean;
    bool areBothNotSmilling = !aSmile && bSmile == false; // ! and == false will produce the same results
    return areBothSmilling || areBothNotSmilling;
    

    但是如果你仔细想想,如果两个布尔值相等,你想返回true,所以我认为这也解决了它:

    return aSmile == bSmile;
    

    【讨论】:

    • 我从您的帖子中删除了(居高临下的)评论...我也不认为这解决了 OP 遇到的实际问题。
    • 现在我看到他问题的最后一行是质疑为什么不编译,但不用担心,这个答案可以留下来帮助他更好地理解布尔运算符
    【解决方案5】:

    你应该像这样声明 aSmile 和 bSmile

    static void Main(string[] args)
    {
        bool aSmile=true;
        bool bSmile=false;
        AreWeInTrouble(aSmile, bSmile);
    }
    

    你的方法应该有这个签名

    public static bool  AreWeInTrouble(bool aSmile,bool bSmile)
    

    【讨论】:

      【解决方案6】:

      这个逻辑可以通过简单的异或逻辑来实现。

      public static bool AreWeInTrouble(bool aSmile, bool bSmile)
      {
          return aSmile == bSmile;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-09-19
        • 2017-08-06
        • 1970-01-01
        • 2021-02-19
        • 2013-01-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多