-1

我在一个类中有一个函数,但在“Withdraw”下收到一个错误,“并非所有代码路径都返回一个值”。我认为添加一个 void 可以解决问题,但似乎无法让它消失。知道如何修改我的代码吗?这是部分:

public virtual double Withdraw(double amount)
  {
     if (amount > balance)
     {
        MessageBox.Show("Debit amount exceeded account balance.", "Insufficient funds!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
     }
     else
        return balance - amount;
  }
4

7 回答 7

4

由于您已声明您的函数返回 a double,因此无论采用哪个分支,它都需要执行该操作if

您需要在返回后从 , 的true一侧返回一个值,例如:ifMessageBox

if (amount > balance)
{
    MessageBox.Show(...);
    return balance;
}
else ...
于 2013-04-23T06:59:13.653 回答
3

不是直接的答案,但我认为您的方法有多种用途,计算并向用户显示消息,您应该考虑使用这样的两种方法

public virtual double Withdraw(double amount)
{
    if (amount > balance)    
        throw new Exception("your message")        
    else
        return balance - amount;
}

调用者的代码

try{
 Withraw(...)
}
catch{
 Your messageBox
}
于 2013-04-23T07:09:57.327 回答
2

你的 ode 在任何情况下都应该返回一些值,所以

public virtual double Withdraw(double amount)
  {
     if (amount > balance)
     {
        MessageBox.Show("Debit amount exceeded account balance.", "Insufficient funds!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
        return SOME_NON_VALID_VALUE_FOR_YOUR_APP; //or raise an exception,
        // depends on architecture 
     }

     return balance - amount;       
  }

考虑所提供代码的逻辑,如果amount > balance不正确,则返回计算。

于 2013-04-23T06:59:04.370 回答
2

您下面的代码行不返回任何值是主要原因:

if (amount > balance)
 {
    MessageBox.Show("Debit amount exceeded account balance.", "Insufficient funds!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
 }

您应该在 之后返回一个双精度值MessageBox.Show

于 2013-04-23T07:00:01.537 回答
1

你需要在理想之后重新做一些MessageBox.Show事情0

  public virtual double Withdraw(double amount)
  {
     if (amount > balance)
     {
        MessageBox.Show("Debit amount exceeded account balance.", "Insufficient funds!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            return 0;
     }
     else
        return balance - amount;
  }
于 2013-04-23T06:59:30.670 回答
0

您的函数应该返回一个双精度值,但如果amount>balance它不会。

public virtual double Withdraw(double amount)
{
    if (amount > balance)
    {
        //your messagebox code    
        return double.NaN; // or whatever you think is correct in this case.
    }
    else
        return balance - amount;
}
于 2013-04-23T06:58:59.680 回答
0

您正在double通过函数返回值。

但只在其他部分提到。

如果 , if(amount > balance) 条件为真,那么您也必须返回该值。

见下面的代码:

    public virtual double Withdraw(double amount)
      {
         if (amount > balance)
         {
            MessageBox.Show("Debit amount exceeded account balance.", "Insufficient funds!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
         }
         else
            return balance - amount;

         return 0;
      }
于 2013-04-23T06:59:47.553 回答