【问题标题】:c# - Changing a string inside of an if statement isn't workingc# - 在 if 语句中更改字符串不起作用
【发布时间】:2015-11-03 00:19:10
【问题描述】:

我在游戏中有这个命令,所以在这里

internal class GambleCommand : Command
{
    public GambleCommand() : base("roll", 3)
    {
    }

    protected override bool Process(Player player, RealmTime time, string[] args)
    {
        try
        {
            if (args.Length == 1)
            {

                int num = int.Parse(args[0]);
                Random rnd = new Random();
                string pl = player.Name;
                string rand = rnd.Next(0, num).ToString();

                if (num < 0)
                {
                    rand = rnd.Next(num, 0).ToString();
                }

                foreach (Client i in player.Manager.Clients.Values)
                {
                    i.SendPacket(new TextPacket
                    {
                        BubbleTime = 0,
                        Stars = -1,
                        Name = pl,
                        Text = "rolled a " + rand + " out of " + num + "."
                    });
                }
            }
        }
        catch
        {
            Random rnd = new Random();
            string pl = player.Name;
            string rand = rnd.Next(0, 100).ToString();
            foreach (Client i in player.Manager.Clients.Values)
            {
                i.SendPacket(new TextPacket
                {
                    BubbleTime = 0,
                    Stars = -1,
                    Name = pl,
                    Text = "rolled a " + rand
                });
            }
        }
        return true;
    }
}

这里的一切都很好,除了说的部分

if (num < 0)
{
    rand = rnd.Next(num, 0).ToString();
}

如果您选择的数字是负数,基本上这应该做的是将位置从 (0, num) num (最大数字)更改为 (num, 0)。截至目前,当我输入否定时,它会变为默认 0-100,即 catch 语句。

【问题讨论】:

  • args[0] 确定是一个数字吗?
  • 字符串 rand = rnd.Next(0, num).ToString();如果 num 为负数怎么办?你必须先检查一下。

标签: c# string if-statement


【解决方案1】:

rnd.next 取最小值,然后取最大值。

int num = int.Parse(args[0]);
Random rnd = new Random();
string pl = player.Name;
string rand = rnd.Next(0, num).ToString();//Exception since negative value is less than 0
if (num < 0)
{
    rand = rnd.Next(num, 0).ToString();
}

试试这个:

string rand = "";
if(num < 0)rand = rnd.Next(num, 0).ToString();
else rand = rnd.Next(0, num).ToString();

【讨论】:

  • 请记住,最大值是独有的 - 因此,如果您想要从110 的数字,您需要致电rnd.Next(1, 11)
【解决方案2】:

当 num 值为负时,您必须在下面的行中遇到异常:

 string rand = rnd.Next(0, num).ToString();

在 if 块中移动上面的语句:

if (num < 0) string rand = rnd.Next(num, 0).ToString();

【讨论】:

    【解决方案3】:

    还有一个注意事项:这一行...

     Text = "rolled a " + rand + " out of " + num + "." 
    

    num 需要是 num.ToString() + "."

    【讨论】:

    • 这实际上不是真的......它在我的游戏中都可以正常工作:P
    • @B3clawed 这是真的,它只是由编译器为你完成的。任何对象的默认值都是在连接期间与该类型调用的基本 .ToString() 方法一起装箱,如以下答案所示:stackoverflow.com/a/1974811。显式调用 ToString() 有性能优势,但可能仅限于密集的字符串操作。
    猜你喜欢
    • 1970-01-01
    • 2017-06-06
    • 2012-12-06
    • 1970-01-01
    • 2012-11-15
    • 1970-01-01
    • 1970-01-01
    • 2017-03-30
    • 1970-01-01
    相关资源
    最近更新 更多