2017-05-17 13 views
0

私は、駆動するマイル数と、ガロン当たりのマイル数を計算するためのマイルを計算するクラスを持つフォームを作成することになっています。私のフォームでDriven + Milesを使用したクラスメソッド

、私のコード:私のクラスで

//Create a default value of 0. 
     double dblDefault = 0; 

     //Create a TryParse if the input is double, if not, show error message. 
     if (!double.TryParse(txtDriven.Text, out dblDefault)) 
     { 
      dblDefault = -1; 
     } 

     //Separation line... 
     if (dblDefault >= -1) 
     { 
      double dblDriven = double.Parse(txtDriven.Text); 
      double dblUsed = double.Parse(txtUsed.Text); 

      CMilesPerGallon CTrans = new CMilesPerGallon(); 
      double dblMpgTotal = CMilesPerGallon.numofmiles(dblDriven); 
      lblMpgTotal.Text = dblMpgTotal.ToString("C"); 
     } 
     //If user inputs negative values, display message box for error. 
     else 
     { 
      MessageBox.Show("Invalid input, must be a positive 'double' value."); 
     } 

、私のコード:

public class CMilesPerGallon 
{ 
    //Create calculation method. 
    public double calculate(double numofmiles, double numofgallons) 
    { 
     //Acquire the math. 
     double mpg = numofmiles/numofgallons; 

     //Return the MPG. 
     return mpg; 
    } 
} 

私が何か間違っていたどこかで知っているが、私は数字に見えることはできませんそれを出す。これまでの唯一のエラーは、 'double dblMpgTotal = CMilesPerGallon.numofmiles(dblDriven)'です。 'numofmiles'には定義が含まれていないためです。

+0

あなたは 'calculate'メソッドを呼び出すために意味したか、あなたが表示していない' numofmiles'方法がありますか? –

+0

それは正しいです。だから私は少し周りをswtichedし、これをした、 「ダブルdblMpgTotal = CMilesPerGallon.calculate(numofmiles、numofgallons);」が、それはnumofmilesとnumofgallonsは、コンテキスト内に存在しないと言います。それは私のクラスの私の計算方法のために存在するはずですか?または、私はここで何かを逃しています。 –

+0

いいえ、パラメータ 'numofmiles'と' numofgallons'は 'calculate'メソッド内でしかアクセスできません。 –

答えて

1

があなたのCMilesPerGallonクラス内numofmilesと呼ば一切方法ありません、しかし、私はあなたがcalculateメソッドに引数としてdblDrivendblUsedを渡したいと仮定したいです。

例えばcalculate方法はCTransインスタンス上で動作ではなく、それは静的ではありませんCMilesPerGallonとしてクラスを経由して直接呼び出されること

double dblMpgTotal = CTrans.calculate(dblDriven, dblUsed); 

ノート。

+0

'CMilesPerGallon'には' numofmiles() 'というメソッドはありません。あなたの提案は引き続きコンパイラエラーを引き起こします。私は、あなたが電話する正しい方法を示すことによって完全な答えを与えることをお勧めします。 –

+0

@ Code-Apprentice私の更新された答えがあなたのコメントを達成することを願っています。 –

-1

可変範囲の誤解があります。変数numofmilesnumofgallonsは、お客様のというコンテキストでは、dblDrivendblUsedを使用しています。だから、次のようになります。

double dblDriven = double.Parse(txtDriven.Text); 
double dblUsed = double.Parse(txtUsed.Text); 

CMilesPerGallon CTrans = new CMilesPerGallon(); 
double dblMpgTotal = CTrans.calculate(dblDriven, dblUsed); 
+0

'numofmiles()'というメソッドはありません。 –

+0

申し訳ありませんが、OPコードから修正するのを忘れました。 – NetMage

+0

また、 'calculate()'は静的メソッドではありません –

0

コード には二つの問題があります - クラス名 でメソッドを呼び出す - メソッド名として変数名を呼び出し、その変数もそのスコープでは使用できませんが。

私は問題を説明するためにコードを保管し、どのように呼び出すべきかを示すために編集しました。行のコードの一部

CMilesPerGallon CTrans = new CMilesPerGallon(); 
double dblMpgTotal = CMilesPerGallon.numofmiles(dblDriven); 
lblMpgTotal.Text = dblMpgTotal.ToString("C"); 

double dblMpgTotal = CMilesPerGallon.numofmiles(dblDriven); 

あなたは、あなたが

double dblMpgTotal = CTrans.numofmiles(dblDriven); 
として作成されたオブジェクト名を使用する必要があるのに対し、クラス名を使用する方法 numofmilesを呼び出しています

ClassName.MethodNameで静的メソッドのみを呼び出すことができます。 cTransを使用して問題を解決する必要があります。あなたがメソッドnumofmilesを持っていない、あなたはcalculateメソッドを使用したい場合は、その後、あなただけの

double dblMpgTotal = CTrans.calculate(dblDriven, dblUsed); 

として呼び出す必要があり、それがお役に立てば幸いです。

+0

'numofmiles()'という名前のメソッドはありません。 –

+0

はい、私は質問された人がいくつかの概念の使用に関する誤解を持っていると仮定します。だから私は説明と同じコードを維持しようとしました。あなたのコメントに基づいて、彼は最終的なラインを持っているように、私はそれを編集しました、ありがとう。 –

+0

より完全な答えをお寄せいただきありがとうございます。 –

0

私はあなたが探していた答えを提供していませんが、私を信頼して、あなたが必要とする答えを提供しています。プログラムの基本的な概念はほとんどありません。あなたの質問を見て、私は本当に誰もいないので、あなたに直接答えを与えることはできません。しかし、私はあなたに正しい方向を指摘し、残りはあなたに依存します。

次の質問の全ての回答を収集するとき、あなたが問題だったかを理解します、私はかなり確信して、以下の質問の答えを収集してみてください - 関数を定義する間

  • 違い/方法と実行関数/メソッド関数へのパラメータとして
  • 受け渡し値
  • 何オブジェクト指向プログラミング
  • クラスとオブジェクト、クラスメソッド、オブジェクトメソッドとの間の同様差と
  • 違い

あり、よりますが、これらに開始できます。

関連する問題