2012-02-15 3 views
0

Привет, Я пытаюсь передать глобальную переменную методу и вызывать его несколько раз в цикле while. Это швы, чтобы не работать, и я не знаю, что с этим не так. Похоже, что это должно быть из некоторых примеров, на которые я смотрел, но, по-видимому, нет. Я хочу, чтобы приличная переменная увеличивалась до 250, я тестировал функцию за пределами цикла while [и она работала для меня там, но внутри нее ее не столько она просто остается 0, а высота уменьшается каждый раз он проходит через цикл 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, он переопределяет значение вашего более широкого диапазона decent, а в контексте velocity. Для достижения этого эффекта, вы можете либо переименовать параметр decent к чему-то еще или использование:

this.decent = decent + 31.25f 

Я не совсем понимаю, почему decent это поле, хотя, если вы предполагаете хотите передать его члену функция. Это может так же легко быть достигнуто путем изменения декларации velocity к:

private static void velocity() 

, а затем оставить использование, как вы в настоящее время есть.

+0

Обновлено, чтобы включить дальнейшее понимание. –

Смежные вопросы