使用if / else语句时无法获取返回值的方法 - C#

时间:2017-06-30 13:31:39

标签: c# return boolean

我对编码很陌生 - C#是我尝试学习的第一种语言 - 而且我的一个代码遇到了问题。我使用Visual Studio,这个代码的要点是我试图从三个文本框中提取数字,将它们传递给返回最大数字的方法,然后在另一个文本中显示结果框。我已经浏览了这个网站上的其他线程寻找解决方案,但没有运气。

Visual Studio没有向我显示代码中的任何错误,程序执行正常。但是当我输入三个数字时,我无法在答案框中显示最大的数字。我不认为从盒子中获取数字是一个问题,因为如果我选择的话,我可以单独打印这些数字。但是,我也认为我已经正确地编写了这个方法(想想这里的操作词)。

旁注:我知道我可以使用Math.Max()方法代替if / else语句,但在开始使用内置方法之前,我试图理解基础知识这一点。

private double max(double firstNum, double secNum, double thirdNum)
{
    double maxNum = 0;
    if (firstNum > secNum && firstNum > thirdNum)
    {
        maxNum = firstNum;
    }
    else if (secNum > firstNum && secNum > thirdNum)
    {
        maxNum = secNum;
    }
   else 
    {
        maxNum = thirdNum;
    }

    return maxNum;
}

private void retBtn_Click(object sender, EventArgs e)
{
    double num1, num2, num3;
    num1 = double.Parse(num1Box.Text);
    num2 = double.Parse(num2Box.Text);
    num3 = double.Parse(num3Box.Text);
    double biggestNum = max(num1, num2, num3);
    ansBox.Text = biggestNum.ToString();
}

这是我目前拥有的代码。任何帮助将不胜感激!

编辑:已链接的另一个帖子没有回答我问的相同问题。它显示了如何编写找到最大数字的方法,这是我已经完成的。我遇到的问题是当我按下retBtn时,文本框中没有任何内容。我认为问题在于我的" double maximumNum = max(num1,num2,num3)"或者在我方法的退货声明中。

3 个答案:

答案 0 :(得分:0)

您的方法定义为

max(double A, double B, double C)

但你没有涵盖整个组合......让我们用这个反例来分解它:

根据你的逻辑给出这个输入:

double biggestNum = max(10, 10, 1);

然后

 //this condition will fail since is a short circuit and firstNum > secNum is false
 if (firstNum > secNum && firstNum > thirdNum)
{
    maxNum = firstNum;
}
//this condition will fail too since for the same reason
else if (secNum > firstNum && secNum > thirdNum)
{
    maxNum = secNum;
}
//you are inferring then that C=1 is the biggest.. BOOM!!!
else 
{
    maxNum = thirdNum;
}

在你跳过并丢弃最大候选人之前,请先用笔和纸盖住所有可能的组合....

答案 1 :(得分:0)

我假设根据您的评论“我可以单独打印这些数字”,您在连接按钮单击以阅读这些文本框时没有任何问题(并且可能在呈现最高数值时也没有问题)。

我想你试图理解if / else语句是如何工作的,并且混淆了你的方法中没有返回最高数字。正如提到的“ΦXocę웃Пepeúpaツ”,你的逻辑中存在一个缺陷,它导致默认的'else'语句 - >尝试使用> =而不是>

答案 2 :(得分:0)

感谢所有回答的人;我搞定了!向@ΦXocę웃Пepeúpaツ喊出我指出我的逻辑错误,然后@Charles May告诉我调试工具。如果有人有兴趣,这是固定代码:

namespace Passing_Data
{
public partial class Form1 : Form
{
    private double maxNum;

    public Form1()
    {
        InitializeComponent();
    }


    private double max(double num1, double num2, double num3)
    {
        if (num1 >= num2 && num1 >= num3)
        {
            maxNum = num1;
        }
        else if (num2 >= num1 && num2 >= num3)
        {
            maxNum = num2;
        }
       else if (num3 >= num1 && num3 >= num2)
        {
            maxNum = num3;
        }
        return maxNum;
    }


    private void retBtn_Click(object sender, EventArgs e)
    {
        double num1, num2, num3;
        num1 = double.Parse(num1Box.Text);
        num2 = double.Parse(num2Box.Text);
        num3 = double.Parse(num3Box.Text);
        maxNum = max(num1, num2, num3);
        ansBox.Text = maxNum.ToString();
    }