【问题标题】:C# return and display syntax issueC#返回和显示语法问题
【发布时间】:2012-06-26 08:02:18
【问题描述】:

如果 if 语句作为 true 传递,我无法将返回值从 TheMethod() 传递到 Main 并显示单词。

我已经想到了两种方法,但都没有奏效,但我认为我缺少 synatx。

  1. 使用返回 ?;非 void 方法,然后显示返回值。
  2. 使用 void 方法并实际写出(示例如下)

所以是的,我在这方面是新手,但是我已经进行了很多次迭代,所有内容都融合在一起,我忘记了我尝试过的内容。任何有关语法的帮助都非常适合这两种方式。

基本上我需要它来迭代数字

1,2,3,4 并且根据当前迭代是否匹配 if 语句中的表达式,它将显示一个单词。

例子:

if (3 = i)
{
   Console.WriteLine("Word");
}

代码:

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

namespace Proj5
{
class Program
{
    int i = 0;



    static void Main(int i)
    {

        for (i = 0; i < 101; i++)
        {

            Console.WriteLine("test");
        }
    }

    string TheMethod(int i)
    {
        string f = "Word1";
        string b = "Word2";


        if (i == 3)
        {
            return f;
        }

        if (i == 5)
        {
            return b;
        }

        if (0 == (i % 3))
        {
            return f;
        }

        if (0 == i % 5)
        {
            return b;
        }
        else
        {
            return b;
        }

    }
}
}

【问题讨论】:

    标签: c# loops methods for-loop iteration


    【解决方案1】:

    您不能在静态 Main 类中引用非静态变量 (i) 和方法 (TheMethod)。试试这个:


    class Program
    {
    static void Main()
    {
        for (int i = 0; i < 101; i++)
        {
            Console.WriteLine(TheMethod(i));
        }
    }
    
    static string TheMethod(int i)
    {
        string f = "Word1";
        string b = "Word2";
    
        if (i%3 == 0) return f;
        if (i%5 == 0) return b;
        return b;
    }
    }
    

    【讨论】:

    • 如果你回来了,那为什么还要麻烦别人呢? - 我投了反对票,因为你在 else 声明中添加了,误导了一个相信你的话的人,他们是必需的! :-P
    • 我没有投反对票,但是正如您所说,return 之后的 else if 并不是真正必要的,(i == 3)(i == 5) 测试是多余的。
    • 我错过了我的代码中的“else”,现在修复了这个问题,我还在我的代码中添加了一个“注释”来解释 mod 如何对 OP 起作用。
    • @MiMo 谢谢。显然我今晚喝的一瓶啤酒太多了。
    【解决方案2】:

    注意:如果 i == 5 和 i % 5 == 0 的单独一个,则不需要。% 是“mod”,表示除法后的余数,所以 5 / 5 = 1,没有余数所以 5 mod 5 = 0...

    这里是您尝试 FizzBu​​zz 的粗略指南/修复:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace Proj5
    {
    class Program
    {
        private static void Main()
        {
            for (int i = 0; i < 101; i++)
            {
                Console.WriteLine(TheMethod(i));
            }
        }
    
        string TheMethod(int i)
        {
            string f = "Fizz";
            string b = "Buzz";
    
            if ((i % 3 == 0) && (i % 5 == 0))
            {
                return f+b;
            }
            if (i % 3 == 0)
            {
                return f;
            }
    
            if (i % 5 == 0)
            {
                return b;
            }
    
            return i.ToString();
    
        }
    }
    }
    

    但是有更清洁的解决方案:

    string result = "";
    for (int i = 1; i < = 101; ++i)
    {
        if ((i % 3 == 0) && (i % 5 == 0)) result += "FizzBuzz";
        else if (i % 3 == 0) result += "Fizz";
        else if (i % 5 == 0) result += "Buzz";
        else result += i.ToString();
        result += ", ";
    }
    

    或者,如果您更喜欢 LINQ-y Lambas:

    public static void FizzBuzz()
    {
        Dictionary<Func<int, bool>, Func<int, string>> rules = new Dictionary<Func<int, bool>, Func<int, string>>();
        rules.Add(x => x % 5 == 0 && x % 3 == 0, x => “fizzbuzz”);
        rules.Add(x => x % 3 == 0, x => "fizz");
        rules.Add(x => x % 5 == 0, x => "buzz");
        rules.Add(x => x % 5 != 0 && x % 3 != 0, x => x.ToString());
        rules.Add(x => true, x => "\n");
    
        var output = from n in Enumerable.Range(1, 100)
                     from f in rules
                     where f.Key(n)
                     select f.Value(n);
    
        output.ToList().ForEach(x => Console.Write(x));
    }
    

    【讨论】:

    • 您的代码与问题中的代码有所不同 - 在一种情况下返回 f+b 而不是 fb - 但似乎您已经以某种方式知道问题(调用它是“FizzBu​​zz”),因此您正在为您知道的问题提供解决方案,而不是直接给出答案 - 是这样吗?
    • ..为什么Main(int i)?该整数参数将来自哪里? (而且没用过……)
    • 似乎 OP 不想说他在使用 FizzBu​​zz 时遇到了问题,这是我们很多人在招聘毕业生时使用的常见编程测试。这是一种淘汰不会编码的人的简单方法。如果 i 是 3 的倍数打印 Fizz,则规则从 0-N 迭代,如果它是 5 的倍数,则打印 Buzz,如果它是两者的倍数,则打印 FizzBu​​zz,否则打印数字...至于 main(int i)我什至没有注意到,我从 OPs 代码中复制了它。我现在就修复它! :)
    猜你喜欢
    • 1970-01-01
    • 2010-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多