有人能用c#帮我解决这个逻辑吗?

本文关键字:解决 | 更新日期: 2023-09-27 18:16:04

下面是我想做的逻辑,有人可以用c#帮助我解决这个问题吗?

 string strMessage=string.empty;
 for (int i = 0; i < 20; ++i)
 {
     switch i
        {
        Case 1,2,7,5:
          strMessage="You Won";
    break;
        Case 6,8,10,3:
          strMessage="You can try again";
    break;
         }
   }
Response.write(strMessage);

当i的值为1,2,7或5时,strMessage="You won"当i的值为6,8,10或3时strMessage="You can try again"

有人能用c#帮我解决这个逻辑吗?

string strMessage = string.Empty;
for (int i = 0; i < 20; ++i) 
{
    switch(i)
    {
        case 1:
        case 2:
        case 7:
        case 5:
            strMessage = "You Won";
            break;
        case 6:
        case 8:
        case 10:
        case 3:
            strMessage = "You can try again";
        break;
    }
}
Response.write(strMessage);

这个特殊的代码总是会导致

strMessage = "You can try again";

,因为for循环,当i>10时,开关将不做任何事情。

你可以这样写

public string Evaluate(int value)
{            
    if (new[] {1, 2, 7, 5}.Contains(value)) return "You Won";
    return new[] {3, 6, 8, 10 }.Contains(value) ? "Try again" : "";
}

不确定你想用你的循环做什么…看起来有点坏,但如果你试图写出每个0..19

Enumerable.Range(0, 20).Select(Evaluate).ToList().ForEach(Response.write);

您的循环将导致打印所有消息,以及12个空行。

这里有一些伪代码:

for the values 0 to 19 
    if i == 1 or 2 or 7 or 5 then message = "You Won"
    else if i == 3 or 6 or 8 or 10 then message = "You can try again"
    else  message = string.empty

如果你在脑子里遍历你的代码,或者使用铅笔和纸,你的问题就会变得清晰。

所以,当它达到最大的数字在你的情况下(它是10),消息将被设置为"你可以再试一次",不会再设置。

所以,当循环结束时,消息将是"You can try again"…要解决这个问题,要么移动您的响应。写入到循环内

你的开关语法完全错误:

switch (i)
{
   case 1:
   case 2:
   // do something
   break;
}

这里是交换机的MSDN参考。

一般准则是,您可以将多个case语句放在一起,但是case不能失败(就像在C/c++中一样),它必须以break;

结束。

每个大小写可能只表示一个值,所以您要做的是使大小写不间断:

string strMessage=string.empty;
 for (int i = 0; i < 20; ++i)
 {
     switch i
        {
        Case 1:
        Case 2:
        Case 7:
        Case 5:
          strMessage="You Won";
    break;
        Case 6:
        Case 8:
        Case 10:
        Case 3:
          strMessage="You can try again";
    break;
         }
   }
Response.write(strMessage);

我相信你在编译这个时遇到了麻烦,因为像"Case1,2,7,5"这样的语句是无效的。

相反,你需要对它们进行分层,并在适当的时候使用fall - through/break。

我相信这就是你想要达到的目标:

for (int i = 0; i < 20; i++)
{
    switch (i)
    {
    Case 1:
    Case 2: 
    Case 5:
    Case 7:
        strMessage="You Won";
        break;
    Case 3:
    Case 6:
    Case 8:
    Case 10:
        strMessage="You can try again";
        break;
    }
}

参见相关问题multicases in Switch

你应该这样写:

string strMessage = string.Empty;
        for (int i = 0; i < 20; ++i)
        {
            switch (i)
            {
                case 1:
                case 2:
                case 7:
                case 5:
                    strMessage="You Won";
                    break;
                case 6:
                case 8:
                case 10:
                case 3:
                    strMessage="You can try again";
                    break;
            }
        }