【问题标题】:Is there a way to tell an if statement if a condition is true do nothing如果条件为真,有没有办法告诉 if 语句什么都不做
【发布时间】:2019-12-04 15:11:55
【问题描述】:

在 c# WPF 中使用随机数生成器为每个骰子创建一个掷骰子游戏。如果单击骰子,我想保护该值,以便当用户掷骰子时它不会改变。 我为每个骰子按钮实现了一个按钮单击,单击时会禁用该按钮。

 private void Dicebtn3_Click(object sender, RoutedEventArgs e)
    {
        Dicebtn3.IsEnabled = false;
    }

效果很好。我不确定的部分是如何告诉我的 dicerollBtn 如果单击按钮不生成数字。 滚动码在这里

private void rollBtn_Click(object sender, RoutedEventArgs e)
    {
        if (Dicebtn1_Click) rndNum1 = rndNumbers.Next(1, 6);
        else 
        rndNum2 = rndNumbers.Next(1, 6);
        rndNum3 = rndNumbers.Next(1, 6);
        rndNum4 = rndNumbers.Next(1, 6);
        rndNum5 = rndNumbers.Next(1, 6);
        rndNum6 = rndNumbers.Next(1, 6);

【问题讨论】:

  • 检查是否启用? if (Dicebtn1.IsEnabled)
  • 您是否想每次都在else 部分和其余行中调用rndNum2 = rndNumbers.Next(1, 6);?由于缺少适当的缩进/大括号,尚不清楚您打算在那里做什么。
  • 抱歉没有说明清楚。我想要的是仅在未单击按钮时生成 RndNum 。例如,如果单击 RndNum2 的按钮,我想忽略生成数字。这说明清楚了吗?
  • 另请注意,Next 的最大值参数是独占,因此您只能在代码中选择15 之间的数字。跨度>
  • 在回答标题中的问题“是”时,只需在其后面加上空大括号即可表示空代码块。或者更好的是,只需使用相反的条件,不要包含else

标签: c# wpf if-statement random


【解决方案1】:

如果我理解正确,你想要这个:

private void rollBtn_Click(object sender, RoutedEventArgs e)
{
  // Check for each button if it is enabled. Roll die if so (implicit: otherwise don't). 
    if (Dicebtn1.IsEnabled) rndNum1 = rndNumbers.Next(1, 7); // max is exclusive !
    if (Dicebtn2.IsEnabled) rndNum2 = rndNumbers.Next(1, 7);
    if (Dicebtn3.IsEnabled) rndNum3 = rndNumbers.Next(1, 7);
    if (Dicebtn4.IsEnabled) rndNum4 = rndNumbers.Next(1, 7);
    if (Dicebtn5.IsEnabled) rndNum5 = rndNumbers.Next(1, 7);
    if (Dicebtn6.IsEnabled) rndNum6 = rndNumbers.Next(1, 7);
}

请注意,您不需要为每个 if 指定一个 else。放下吧。

Next(int,int) 中的 maxValueex 包含在内,因此如果您想要 [1..6],您需要致电 Next(1,7)


还有一件事:

关于您的原始代码:

if (Dicebtn1_Click) rndNum1 = rndNumbers.Next(1, 6);
    else 
    rndNum2 = rndNumbers.Next(1, 6);
    rndNum3 = rndNumbers.Next(1, 6);
    rndNum4 = rndNumbers.Next(1, 6);
    rndNum5 = rndNumbers.Next(1, 6);
    rndNum6 = rndNumbers.Next(1, 6);

请注意,这相当于:

if (Dicebtn1_Click)
{
   rndNum1 = rndNumbers.Next(1, 6);
}
else
{ 
    rndNum2 = rndNumbers.Next(1, 6);
} // <= Yes , HERE!
// Rest will be executed unconditionally!
    rndNum3 = rndNumbers.Next(1, 6);
    rndNum4 = rndNumbers.Next(1, 6);
    rndNum5 = rndNumbers.Next(1, 6);
    rndNum6 = rndNumbers.Next(1, 6);

我发现自己总是使用括号是一种很好的做法。 (有非常少的例外......)至少只要代码“正在建设中”。


最后(感谢@RufusL 对问题的评论):

“如果条件为真,有没有办法告诉 if 语句什么都不做”

if(condition){}else{ doSomething(); }

if(!condition){ doSomething();}

if(condition == false){ doSomething();}

或者如果您想明确详细说明您的决定:

if(condition){ /* DO NOTHING */ } else {doSomething();}

...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-22
    • 1970-01-01
    • 2021-07-31
    • 2013-01-25
    • 2014-06-20
    • 2014-10-08
    相关资源
    最近更新 更多