2012-02-15 22 views
0

ちょっと、グローバル変数をメソッドに渡して、whileループで何度か呼び出そうとしています。それは働かないために継ぎ目があり、私は何が間違っているのか分からない。それは私が見たいくつかの例からであるはずのもののように見えますが、明らかにそうではありません。私がしたいことは、まともな変数が250まで増加することです、私はwhileループの外で関数をテストしました[それは私のために働いていましたが、その内部ではそれほど多くではなく、高度が毎回減少しているそれはwhileループを通って行く。私はあなたがしたいと思います。このメソッドへの変数の受け渡し

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

// Every measuerments are in 
//Feet 
//Seconds 
//This program is to sim a simple jump with no graphics. Work the numbers out for final    implementaion . 
namespace Jumper1Test 
{ 
    class Program 
    { 
    //10 - 20 feet above ground pull both cords to slow down to about 0 ft per second 
    private static int alt;   //in feet 30,000 20,000, 15,000 ft *Note keep decent same scale\measurment 
    private static float decent = 0;  //speed of jumper 250ft per second cute deploed 15-20ft p[er second want to hit 0 when landing 
    private static int cuteDelay = 3; //3 second cute delay after opeing (ruf estimate on average) 
    private static bool leftCord; 
    private static bool rightCord; 
    private static bool cuteDeployed; //if parachute is deployed 
    private static bool jumped;  //jump iniciated 


    //environtmnet effects 
    private enum windDrection {North, South, East, West, NE, NW, SE, SW } //NE NW = North East West respectivly 
    private static int windspeed; //in knots 

    static void Main(string[] args) 
    { 
     Console.WriteLine("Jump Sim 1.0"); 

     //select the hight for the jump 
     Console.WriteLine("Enter Jump Altitued:"); 
     Console.WriteLine("a for 30000 Ft"); 
     Console.WriteLine("b for 25000 Ft"); 
     Console.WriteLine("c for 15000 Ft"); 
     String alt1 = Console.ReadLine(); 
     if (alt1.Equals("a")) 
     { 
      alt = 30000; 
     } 
     else if (alt1.Equals("b")) 
     { 
      alt = 25000; 
     }else { alt = 15000; } 
     Console.WriteLine("The Hight of the jump is " + alt); 


     //jumping 
     int countdown = 5; 
     while (countdown != 0) 
     { 
      Console.WriteLine("Jumping in " + countdown); 
      System.Threading.Thread.Sleep(1000); //wait for 1 secod. 
      countdown--; 

     } 
     Console.WriteLine("Jump!"); 
     while (alt != 0) 
     { 
      alt = alt - 5000; 
      Console.WriteLine("Altitue = " + alt); 
      velocity(decent); 
      Console.WriteLine("Speed is: " + decent); 
     } 

     // keep screen from going away 
     // when run from VS.NET 
     Console.ReadLine(); 
    } 



    private static float velocity(float decent) 
    { 

      for (int i = 0; i < 8; i++) //its takes 8 seconds to reach terminal velocity 
      { 
       decent = decent + 31.25f; //increease speed of fall 
       System.Threading.Thread.Sleep(1000); //wait for 1 secod. 



      } 
      return decent; 


    }//end of velocity 


} 
} 
+3

私は疑問符は表示されません。 –

+1

グローバル変数*がC#*にまったく存在しないうちに、どのように "メソッドにグローバル変数を渡そうとしていますか?" – Krizz

+0

'velocity'メソッドの戻り値を変数に代入していません。メソッドに渡す変数は値型であるため、メソッド内から変更することはできません。 – adrianbanks

答えて

2

を持つ任意の助けてくれてありがとう:

//velocity(decent); 
decent = velocity(decent); 

そして、それはまた、decent(降下)はグローバル変数である必要はないことを意味します。それはMain()の適切なローカルになる可能性があります。 より良いソフトウェアを作成するための第一歩として、グローバル化を回避しようとします。

また、いくつかの見事なビデオエフェクト用

//Console.WriteLine("Jumping in " + countdown); 
Console.Write("Jumping in {0} \r", countdown); 

を試してみてください。

0

浮動小数点は値渡しです。あなたはまともに戻す戻り値を代入する必要があります。

decent = velocity(decent); 

他のオプションは、メンバ変数であることから、単にそれをメソッドに渡さないということです。そのメソッドの中で、渡された変数を参照しています。メンバー変数ではありません。

1

decent = decent + 31.25f;velocityには、public static float decent;として定義されているクラスのフィールドの値を設定すると予想されています。この問題は、パラメータがでもという名前のdecentであるため、velocityの文脈では、より広い範囲の意味がオーバーライドされます(decent)。この効果を達成するためには、何か他のものまたは使用にdecentパラメータの名前を変更することができ、次のいずれかあなたがメンバーにそれを渡すことを期待する場合decentはしかし、フィールドである理由

this.decent = decent + 31.25f 

私はかなり理解していません関数。これは、同じように簡単にvelocityの宣言を変更することによって達成することができます。

private static void velocity() 

とあなたが現在それを持っているとして、あなたの使用を残します。

+0

更なる洞察を含めるように更新されました。 –

関連する問題