如何从一个函数中获得局部变量,并将其用于代码中的另一个函数?

本文关键字:函数 用于 另一个 代码 局部变量 一个 | 更新日期: 2023-09-27 17:50:29

我正在制作一台老虎机,我希望betValidation()中的var 'bet'用于result()函数。我的目标是,如果firstRandomNumberGenerator()中生成的两个随机数是相同的,那么玩家下注的赌注将增加三倍,并将添加回他当前的筹码数量。):但是为了做到这一点,我需要得到bet(一个局部变量),并把它放在result(),但我不知道如何。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace randomProjectTAKE3
{
    class Program
    {
        static void Main()
        {
            float playerChips = 1000;
            Console.Write("Player's Chips: ");
            Console.WriteLine(playerChips);
            Console.Write("1. Play Slot  ");
            Console.WriteLine("2. Exit");
            choice();
            result();
            Console.ReadKey();
        }

        static void Update()
        {
        }
        static void choice()
        {
            float choice = float.Parse(Console.ReadLine());
            if (choice == 1)
            {
                firstRandomNumberGenerator();
            }
            else if (choice == 2)
            {
                return;
            }
        }
        static void betValidation()
        {
            float playerChips = 1000;
            float currentPlayerChips;
            Console.WriteLine("Enter your bet: ");
            **var bet = float.Parse(Console.ReadLine());**
            if ((bet <= 0) || (bet > playerChips))
            {
                Console.WriteLine("You did not enter a valid bet.'n");
                Main();
            }
        }
        static void firstRandomNumberGenerator()
        {
            betValidation();

            Random r = new Random();
            int firstNumber = r.Next(2, 8);
            int secondNumber = r.Next(2, 8);
            int thirdNumber = r.Next(2, 8);
            Console.Write(firstNumber);
            Console.Write(secondNumber);
            Console.Write(thirdNumber);
            Console.Write("'n");
        }
        **static void result()**
        {
        }
    }
}

如何从一个函数中获得局部变量,并将其用于代码中的另一个函数?

有几种方法可以实现这一点,一种方法是将bet作为字段移动到程序的作用域中(名称_currentBet将很有用),而不是在函数中声明,以便可以根据需要多次引用它。

然后当玩家下注时,你可以解析并分配变量。这对于玩家的筹码来说也是非常理想的。

class Program
{
private float _playersChips = 1000;
private float _currentBet;
static void Main()
{
//So on and so forth.
}
}

我唯一的想法是将变量By Reference从一个方法传递到另一个方法,查看此链接

哇,好吧…你熟悉全局变量吗?

看看你的代码,你正在用过程(而不是面向对象)风格编写控制台应用程序…虽然这可以在c#中完成,但对于较大的应用程序,它会使代码维护变得非常头痛。

不管怎样,我会尽力帮你的。

Miles的回答基本上是使用全局变量而不是局部变量,这是一个很好的建议,当在程序风格中编程时,然而,你的另一个选择是使playerChips成为一个参考方法参数(如Hussein所建议的),可以在方法之间传递(和修改)…因此(使用他们的建议),您的代码将更改为如下工作:

class Program
{
    public static float _playerChips = 1000;
    private static void Main()
    {            
        Console.Write("Player's Chips: ");
        Console.WriteLine(_playerChips);
        Console.Write("1. Play Slot  ");
        Console.WriteLine("2. Exit");
        choice(ref _playerChips);
        result(_playerChips);
        Console.ReadKey();
    }
    private static void choice(ref float playerChips)
    {
        int choice = int.Parse(Console.ReadLine());
        if (choice == 1)
        {
            firstRandomNumberGenerator(ref playerChips);
        }
        if (choice == 2)
            Environment.Exit(0);
    }
    private static void betValidation(ref float playerChips, ref float bet)
    {                        
        Console.WriteLine("Enter your bet: ");
        bet = float.Parse(Console.ReadLine());
        if ((bet <= 0) || (bet > playerChips))
        {
            Console.WriteLine("You did not enter a valid bet.'n");
            Main();
        }
    }
    private static void firstRandomNumberGenerator(ref float playerChips)
    {
        float bet = 0;
        betValidation(ref playerChips, ref bet);
        System.Random r = new System.Random();
        int firstNumber = r.Next(2, 8);
        int secondNumber = r.Next(2, 8);
        int thirdNumber = r.Next(2, 8);
        if (firstNumber == secondNumber || firstNumber == thirdNumber || thirdNumber == secondNumber)
            playerChips = playerChips + (bet * 3);
        Console.Write(firstNumber);
        Console.Write(secondNumber);
        Console.Write(thirdNumber);
        Console.Write("'n");
    }
    private static void Update()
    {
        return;
    }
    private static void result(float playerChips)
    {
        return;
    }
}

现在,我也改变了choice()方法你写的调用Environment.Exit()和退出程序-这样做的原因是,通过执行Main()你本质上是调用方法中的方法中的方法和增加你的堆栈,最终将导致堆栈溢出…我会考虑更改您的Main()方法,使用基于choice()返回结果的循环,而不仅仅是从betValidation方法再次调用Main()(但是我还没有为您这样做)。