2017-06-30 1 views
1

私はコーディングにはかなり新しいです - C#は私が習得しようとした最初の言語です - 私のコードの。私はVisual Studioを使用しています。このコードの要点は、3つのテキストボックスから数値を取り出し、最大の数値を返すメソッドに渡し、別のテキストボックスに結果を表示しようとしていることです。私は、このサイトの他のスレッドを使って解決策を探していたが、運が無かった。if/elseステートメントを使用して値を返すメソッドを取得できません - C#

Visual Studioではコードにエラーが表示されず、プログラムは正常に動作します。しかし、私は3つの数字を入力すると、答えのボックスに表示するために最大にすることができません。私が選択した場合、それらの数字を個別に印刷できるので、ボックスから数値を取得することは問題ではないと思います。しかし、私はこの方法を正しく書いたと思います(ここでは功績のある単語だと思います)。

サイドノート:if/elseステートメントの代わりに使用できるMath.Max()メソッドがありますが、そのような組み込みメソッドを使用する前に基本を理解しようとしています。

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(); 
} 

ここに私が現在持っているコードがあります。どんな助けでも大歓迎です!

EDIT:リンクされている他のスレッドは、私が求めているのと同じ質問に答えません。私がすでに行った最大の番号を見つける方法を書く方法を示しています。私が持っている問題は、retBtnを押すと、テキストボックスに何も表示されないということです。私は問題が私の "double largestNum = max(num1、num2、num3)"または私のメソッドのreturn文にあると思います。

+0

の可能性のある重複した[?C#では、3つの数字の最大値を見つけるための方法がある](https://stackoverflow.com/questions/6800838/in-c -sharp-is-there-a-method-to-the-max-of-3-numbers) – Sinatr

+0

テキストボックスに何も表示されますか? – PaulF

+0

あなたは何を得ていますか? – Fabiano

答えて

-1

あなたの方法を

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; 
} 

あなたはあなたの前にすべての可能な組み合わせをスキップし、最大候補を破棄する前に、ペンと紙カバーを取る....

+0

質問はデータの取得/表示に関するものですが、その背後にあるロジックはこの場合意味がありません – ccalboni

+0

***フレーズを理解するにはどうすればいいですか***回答ボックスに表示するには最大にすることはできません。 ?? –

+0

だから、あなた(@ΦXocen笑Пepeúpaツ)と@Charles Mayが提案したことを取った後、私はいくつかの進歩を遂げました。私は論理的な誤りを訂正し、プログラムをどのように進めるかを考え出しました。私の問題は、maxNumの値が初期化された0の値から決して変化しないということです。コードをステップ実行するとき、条件が満たされたと仮定して、値を適切な数値に変更する必要がある場合(maxNum = num1など)、割り当てステートメントでもmaxNumの値を0として表示します。この問題のヒント?初心者を助けてくれて本当にありがとう! – Caroline

0

私はあなたのコメントに基づいて、これらのテキストボックスを読むためにボタンをクリックすることに問題はありません(おそらく最も高い数値も表示されません)。

if/else文がどのように動作し、最も高い数値があなたのメソッドで返されなかったかを理解しようとしていたと思います。 "ΦXocen笑Пepeúpaツ"が言及したように、あなたのロジックに欠陥があり、デフォルトの 'else'ステートメントになりました>>の代わりに> =を使用してください>

0

お返事いただいた皆様、私はそれを働かせた!私の論理的なエラーを指摘するために@ΦXocen웃いПepeúpaツに、そしてデバッグツールについて私に知らせるために@Charlesを叫んでください。誰もが興味を持っていた場合は、ここでは固定コードです:

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(); 
    } 
関連する問題