0

如果 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;
        }

    }
}
}
4

2 回答 2

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;
}
}
于 2012-06-25T03:03:31.443 回答
1

注意:如果 i == 5 和 i % 5 == 0 的单独一个,则不需要。% 是“mod”,表示除法后的余数,所以 5 / 5 = 1,没有余数,所以 5模 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));
}
于 2012-06-25T03:12:53.360 回答