передача переменных в метод - PullRequest
0 голосов
/ 16 февраля 2012

Эй, я пытаюсь передать глобальную переменную методу и вызвать ее несколько раз в цикле 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 ]

2 голосов
/ 16 февраля 2012

Я думаю, что вы хотите:

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

И это также означает, что decent (спуск) не обязательно должен быть глобальной переменной. Это могло стать надлежащим локальным из Main (). Старайтесь избегать глобальных изменений в качестве первого шага к написанию лучшего программного обеспечения.

Также попробуйте

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

для некоторых великолепных видеоэффектов.

1 голос
/ 16 февраля 2012

Я думаю, что проблема, которую вы видите, в том, что вы ожидаете, что ваш 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 голосов
/ 16 февраля 2012

Поплавки передаются по значению. Вам нужно присвоить возвращаемое значение обратно в достойный:

decent = velocity(decent);

Другой вариант заключается в том, что, поскольку это переменная-член, просто не передавайте ее методу. Внутри этого метода вы ссылаетесь на переданную переменную, а не на переменную-член.

...