如何从一个函数中获得局部变量,并将其用于代码中的另一个函数?
本文关键字:函数 用于 另一个 代码 局部变量 一个 | 更新日期: 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()(但是我还没有为您这样做)。